
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

invzbl3
27.09.2018
15:09:11

Constantin
27.09.2018
15:09:31

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

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 — это метод курсора, и складывается впечатление, что он просто не может ничего вернуть
Из-за того у вас может стрим упасть

Nick
27.09.2018
15:40:09

invzbl3
27.09.2018
15:40:28

Nick
27.09.2018
15:42:05

Ivan
27.09.2018
15:54:30

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” я не могу.

AstraSerg
28.09.2018
10:23:22

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

Google

AstraSerg
28.09.2018
10:27:09

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

AstraSerg
28.09.2018
10:49:17


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


Vova
29.09.2018
09:59:20
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


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