@MongoDBRussian

Страница 315 из 342
Constantin
27.09.2018
15:04:28
Nick
27.09.2018
15:04:30
и уже ее используйте

invzbl3
27.09.2018
15:04:33
yopp
27.09.2018
15:04:41
жава же

Google
Nick
27.09.2018
15:09:34
еще один момент, вроде выше упоминалось что какоето число доков вставляется, а потом все стопается, если так то сколько влезает и всегда ли одни и те же доки в одном и том же порядке вставляются?

кстати да в стектрейсе нет insertOne, походу надо запрашивать код в студию

invzbl3
27.09.2018
15:11:41
пишу вот так https://ghostbin.com/paste/hxpep

ошибка указывает на строчку Document found = collection.find().first();

yopp
27.09.2018
15:23:44
в этот момент в логах монги что?

invzbl3
27.09.2018
15:23:53
еще один момент, вроде выше упоминалось что какоето число доков вставляется, а потом все стопается, если так то сколько влезает и всегда ли одни и те же доки в одном и том же порядке вставляются?
да, вставляется кол-во документов до определенного момента. получается так, что у меня в capped collection вставляются новые в конец, а старые стираются с начала

Nick
27.09.2018
15:25:05
текс, я помню этот код и этот случай. смотрю вы особо ничему не учитесь в плане работы с кодом

для начала вам нужно научитсья работать с обычными коллекциями, а уже когданить потом переходить на capped

Constantin
27.09.2018
15:29:28
Вы уверены, что у find возвращает что-то?

Чтобы делать .first()

Google
Constantin
27.09.2018
15:29:55
Вообще его можно делать, если .find ничего не нашел?

Nick
27.09.2018
15:31:16
оффтоп по коду. в том куске что вы скинули до сих пор остался поиск и после этого вставка, хотя между этими соыбтиями уже в базе мог появиться такой же документ личная претензия к названиям переменных - вы пишите на java - будьте добры следовать java naming convention и никакой отсебятины 4 уровень вложенность в if - дико увеличивает сложность чтения - нужно выносить код в функции либо упрощать у вас есть абсолютно одинаковые объекты new Document - вынесите в переменную ипереиспользуйте использовать курсор как итератор уже давно моветон есть for each

Constantin
27.09.2018
15:31:37
Я не пишу на java, но похоже, что first — это метод курсора, и складывается впечатление, что он просто не может ничего вернуть

Из-за того у вас может стрим упасть

Ivan
27.09.2018
15:54:30
какая версия?
3.6 Не могли бы вы подсказать далее про журнал?

yopp
27.09.2018
15:55:24
в будущем указывайте полную версию

и платформу

Ivan
27.09.2018
15:55:58
платформа это типа реплика или шард и т.п.?

оу, открыл. Rhel

сейчас скажу полную версию: v3.6.6, rhel

yopp
27.09.2018
16:02:25
после перезапуска журнал очищается?

универсальный совет: попробуйте обновится до последней версии

Ivan
27.09.2018
16:04:32
1) перезапуститься монга не смогла, т.к. журнал на отдельном разделе (о чём тоже вопрос, надо ли оно и какой размер ему.) 2) Спасибо. Вообще в журнале что хранится? Какая-то корреляция с оплогом есть?

Roman
27.09.2018
16:13:21


Alex
27.09.2018
16:22:44
Народ, а подскажите, будут ли просадки в производительности при выборе по стрингу, например, в сравнении с выборкой по ID?

Andrew
27.09.2018
16:24:23
"new.id":1213

Google
Andrew
27.09.2018
16:24:25
?

Roman
27.09.2018
16:24:45
а так можно?

Andrew
27.09.2018
16:24:55
Нужно

Dot notation

Может больше уровней вложенности

Roman
27.09.2018
16:25:26
а если например не будет этого поля?

он не найдет или выдаст ошибку?

Andrew
27.09.2018
16:25:58
То ничего не выдаст, совпадегия по паре ключ значение нет

Можно использовать exists для проверки условтя

Roman
27.09.2018
16:26:36
спс

щас попробую

yopp
27.09.2018
17:00:13
журнал это Write-Ahead-Log. Туда пишется операция до того как она применится к хранилищу

Если монга не может перезапустится, вероятно в этом проблема с журналом. права или что-то ещё

invzbl3
27.09.2018
17:28:18
в этот момент в логах монги что?
читаю в док-е, как достать логи из облачного кластера, пишут, что "M0 Free Tier and M2/M5 shared clusters do not provide downloadable logs." https://docs.atlas.mongodb.com/reference/free-shared-limitations/#atlas-free-tier

Peter
28.09.2018
10:21:35
Вопрос, как просто можно проверить поле на уникальность в 2х collections. К примеру есть collection A({_id, name, type}), и B({_id, name, date}). Нужно сделать уникальным поле name в 2х collections сразу. т.е. если в collection A в документе используеться name=“Vasya”. То в collection B запись с name = “Vasya” я не могу.

Nick
28.09.2018
10:25:15
не забывайте что за время пока вы делаете выборку и вставку ктото другйо сможет вставить туда запись

стандартный race condition

Google
AstraSerg
28.09.2018
10:27:09
не забывайте что за время пока вы делаете выборку и вставку ктото другйо сможет вставить туда запись
Да, есть такая вероятность. Но если интенсивность записи не большая, то можно пренебречь. Наверно... :) Но вообще в 4.0 появились транзакции, более надёжно получится

Nick
28.09.2018
10:30:58
кстати а что будет в результате, если в одной транзакции даные прочитались, а в другой они пишутся и коммитятся

nexxtmedia
29.09.2018
09:49:47
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?

Vova
29.09.2018
09:59:20
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?
Зачем получать весь список если можно средствами монго операторов выполнить "поиск"?

db.tweets.find({ _id: "tweet id" }, { likes: { $elemMatch: { $in: ["user id"] } }}) это первое что в голову пришло

Хотя неправильно, щас перепишу

nexxtmedia
29.09.2018
10:03:46
Mongoose

Vova
29.09.2018
10:05:06
Я не знаю монгус, сам перепиши, в гугле примеры найдёшь

nexxtmedia
29.09.2018
10:06:35
вопрос не только в том как эффективно из бд доставать, а и в каком видео отправлять, желательн ов одном запросе

т.е. это все чтоб прилетало когда человек открывает ленту с твитами

я же не буду запрашивать отдельно по каждому твиту

Vova
29.09.2018
10:09:48
т.е. это все чтоб прилетало когда человек открывает ленту с твитами
всё это что? список всех твитов в ленте + поле, по которому можно понять, лайкнул ли текущий пользователь этот твит?

nexxtmedia
29.09.2018
10:15:10
сейчас вот так прилетает информация в ленту твитов. желательно это все в одном запросе делать [ { "content": { "text": "Tweet one" }, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ]

Vova
29.09.2018
10:15:55
Я так понял что да Мой пример выше вернёт следующие данные При условии что модель tweet такая: { "_id": "tweet id", "likes": ["user id 1", "user id 2"] } Результат будет массив твитов { _id: "tweet id" } если в лайках не найден пользователь; { _id: "tweet id", tweets: ["user id"] } если найден id

так а где у тебя массив likes?

nexxtmedia
29.09.2018
10:17:14
его еще нету

думаю как сделат

@second_VL я понял твой вариант. попробую разобратся как такой поиск в монгузе делать

правда еще ж надо кол-во лайков

Google
nexxtmedia
29.09.2018
10:19:31
отдельно каунтер делать лайков? или считать по количеству айдишников?

Vova
29.09.2018
10:23:18
[ { "content": { "text": "Tweet one" }, "likes": ["userid1", "userid2"], "likesCount": 2, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "likes": ["userid1", "userid3"], "likesCount": 2, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ] db.tweets.find({ }, { likes: { $elemMatch: { $in: ["userid3"] } } }) Результат: [ { "content": { "text": "Tweet one" }, "likesCount": 2, "_id": "5baf5003700c101913212d4e", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 }, { "content": { "text": "Tweet two" }, "likes": ["userid3"], "likesCount": 2, "_id": "5baf5003700c101913212d4a", "author": "5baf4fec700c101913212d4d", "createdAt": "2018-09-29T10:12:19.825Z", "__v": 0 } ]

Как-то так

Это называется projection

nexxtmedia
29.09.2018
10:25:18
спасибо большое, дали несколько идей. также в голову пришло, что я могу (и надо!) хранить список всех постов которые лайкнул пользователь в схеме самого пользователя. возможно это еще поможет.

Vova
29.09.2018
10:27:57
А при добавлении лайка например можно делать так db.tweets.update({ _id: "tweet id" }, { $push: { likes: "user id 4" }, $inc: { likesCount: 1 } })

nexxtmedia
29.09.2018
10:31:17
?спасибо, буду делать

yopp
29.09.2018
11:21:35
Хранить лайки в том-же документе очень плохая идея

https://docs.mongodb.com/ecosystem/use-cases/storing-comments/

Nick
29.09.2018
12:21:34
Господа. Столкнулся с трудностями как продумать эффективную систему лайков для постов-твитов. Использую NodeJS/Mongoose. Первое что приходит в голову выглядит очень неэффективно, куча ненужных вычислений. Поскольку надо не просто счетчик лайков, а и показывать конкретному человеку лайкнул он этот твит или нет. 1. В модель Tweet сделать поле Likes, куда засовывать ObjectID всех лайкнувших. 2. Таким образом мы довольно эффективно можем считать количество лайков (просто кол-во записей) 3. Но когда вопрос стоит чтобы показать конкретному человеку ставил он лайк или нет, нам придется отправлять на клиент список всех лайкнувших и там находить совпадение с айдишником человека. Это выглядит глупо - зачем мне отправлять на клиент массив с 10000 записей лайков, только чтобы там найти совпдаение? 4. А делать отдельный эндпоинт только для статуса лайка где вычислять эти значения отдельно выглядить слишком жирно (подобного функционала будет много, и будет слишком путаница) Как решают такую задачу?
А можете сказать это реальный проект или поиграться с монгой?

29.09.2018
12:27:18
День добрый, основу замутили, зашел с твинка. Такой вопрос: что ставить в $unset чтобы оно неругалось? P.S скриншот нема сделать, твинк только с телефона работает а пересылать туда сюда пикчи ленивенько

Страница 315 из 342