
Александр
08.06.2018
18:50:58
Народ, запрос на добавление в массив поддокументов вместе со $slice -12890 будет сильно ресурсы жрать? Ожидается таких запросов около сотни последовательных раз в 10 минут

Sergey
08.06.2018
19:31:16
привет
подскажите как, например, посчитать сколько комментариев имеет каждый пост. например, у нас есть список айдишников постов, нужно получить количество комментариев каждого

Александр
08.06.2018
20:23:42
Смотря как комментарии хранятся

Google

Sergey
08.06.2018
20:49:19
в отдельной коллекции

yopp
08.06.2018
21:40:52
в отдельной коллекции
Aggregation framework: в коллекции комментариев
Match с in по массиву id постов
group по id постов с sum: 1

Sergey
09.06.2018
07:37:35
спасибо

Артем
09.06.2018
08:17:08
парни как взять первый элемент из группы?
db.grades.find().sort({student_id: 1, score: 1})
вот теперь из него нужно сгруппировать по полю student_id, и взять первый элемент

Bandikoot
09.06.2018
09:57:24

invzbl3
09.06.2018
09:58:47
авторизация вкл?
нет. я решил проблему добавив в конфиг пару строчек:
replication:
replSetName: "rs0"
net:
bindIp: localhost,<IP>

Артем
10.06.2018
02:51:30

Viktor
10.06.2018
02:52:54
Есть findOne

Artem
10.06.2018
02:58:31
cursor.limit() не поможет?

Артем
10.06.2018
03:34:17
С каждой группы по 1 элементу
А ваши варианты просто 1 элемент вернет

rdcm
10.06.2018
08:06:36

Google

rdcm
10.06.2018
08:07:27
https://docs.mongodb.com/manual/reference/operator/aggregation/facet/

invzbl3
10.06.2018
12:17:07
делаю запроc db.grades.find({},{_id: 0}, {type: "homework", score: 1}).sort( { score: 1 } ).pretty(),но получаю не только homework значения ключа type, а и другие... что исправить, подскажите, пжл?
выводит такого плана
{ "student_id" : 191, "type" : "exam", "score" : 0.03425228241156208 }
{ "student_id" : 50, "type" : "homework", "score" : 0.1170101023771353 }
{ "student_id" : 13, "type" : "homework", "score" : 0.4838914493376478 }
{ "student_id" : 74, "type" : "homework", "score" : 0.494513588220491 }
{ "student_id" : 186, "type" : "exam", "score" : 0.6651311278067396 }

Артем
10.06.2018
12:19:02
ты че проходишь курсы по монго?))

invzbl3
10.06.2018
12:19:08

Nick
10.06.2018
12:19:29

invzbl3
10.06.2018
12:20:00
если вынести в отдельные скобки, допустим?

Nick
10.06.2018
12:20:35
посмотрите спеку на метод find
и что там значит 3 объект

Старый
10.06.2018
14:00:13
Дак редис
?мастабирвоание - пока данные, перенос - пока данные, распределённость, вообще не существует

Dmitry
10.06.2018
14:10:47
Всем привет, need help:
db.documents.find({
"$or": [
{"$expr": {"$gt": ["$docDownloadDate", "$searchIndexSyncDate"]}},
{"searchIndexSyncDate": null},
],
"docProcessedSuccessfully": true,
}).limit(10000)
страшно тупит до 3-5 минут,
индексы по docDownloadDate, searchIndexSyncDate, docProcessedSuccessfully есть
Если отдельно запрашивать по $expr - работает быстро, если отдельно {"docProcessedSuccessfully": true}, тоже
но когда вместе через $and тупит :(
может кто-то сталкивался?
ну и вообще вопрос по $expr и сравнении двух полей одного докумнта: mongodb никак не хочет использовать для этого индексы, добавить partialindex на это выражение я так понял тоже нельзя...
если слишком нагло ворвался - плиз сильно не бейте :)

Nick
10.06.2018
14:32:40
чтобы проверить факт использования индексов или их не использования нужно дернуть explain(executionStats) может улучшит понимание
https://docs.mongodb.com/manual/reference/method/cursor.explain/#cursor.explain

Dmitry
10.06.2018
14:40:15

Nick
10.06.2018
14:44:20
вот это вот upsert какая вцелом логика? ну там обновление каталога товаров и проставление актальных данных

Dmitry
10.06.2018
14:46:17

Google

Dmitry
10.06.2018
14:46:49
но "executionTimeMillis" : 117415,

Nick
10.06.2018
14:47:28
закиньте в гист каконить

Dmitry
10.06.2018
14:49:30

Nick
10.06.2018
14:52:28
собственно проблема что у вас под docParsedSuccessfully=true попадает очень много доков, и монга собственно их все прочитывает
нужен простой способ исключать полностью обработанные доки из выборки

Dmitry
10.06.2018
14:53:50
просто на данном этапе мне реально нужно получить почти все документы из базы...
но почему если убрать этот флаг монга быстрее работает?

Nick
10.06.2018
14:54:27
чтото не заметно, из 2кк вас интересует лишь 10к

Dmitry
10.06.2018
14:54:42
если я просто делаю запрос который внутри "$or" отрабатывается раз в 10 быстрее

Nick
10.06.2018
14:55:02
а вополните второй запрос котоырй "быстрее" с эксплейном
и так же в гист

Dmitry
10.06.2018
14:57:26
черт, я убрал индекс и использовал partial для теста, сейчас добавлю и проверю...
это не касается предыдущего результата, просто я добавить partial для docParsedSuccessfully=true, если его убрать из запроса идет COLLSCAN

Nick
10.06.2018
15:01:44
походу тут полюбому лажа, т.к. $expr не умеет использовать индексы и нет возможности ограничить предварительно выборку, то проблемы не избежать
если это реально критично, то стоит пересмотреть структуру данных и добавлять флаг
а то что без второго условия отрабатывает быстрее, то это именно поулчение 10к доков или время до того как монга чтото ответит и выдаст курсор?

Dmitry
10.06.2018
15:04:09
мда, печалька

Nick
10.06.2018
15:06:02
я уверен что запрос без docParsedSuccessfully у вас просто возвращает курсор с частью данных, а полная выборка до момента, когда все прочтете из курсора будет сопоставима по времени как и с флагом
кстати

Google

Nick
10.06.2018
15:06:23
у вас в первом плане запроса пишет "nReturned" : 9480,
типа только чтолько доков найдено в результате

Dmitry
10.06.2018
15:06:39
а можно как-то использовать bucket или что-то такое чтобы разбить базу на куски и по кусочкам разбирать? В принципе мне так и так нужно на 1 запрос не больше 10к доков

Nick
10.06.2018
15:07:44
собственно если вы укажите например не 10к а 9к, то должно быть быстрее
точнее первыая выбокра будет быстрее, а вторая как и сейчас

Dmitry
10.06.2018
15:08:17
просто limit?

Nick
10.06.2018
15:08:30
да, попробуйте для эксперимента

Dmitry
10.06.2018
15:09:02
а если обрезать скажем по docID (Int) - может ускорить? Скажем 0 <= docID <= 40000 и потом уже expr
ну и потом брать [40000, 80000], [80000, 120000]....

Nick
10.06.2018
15:10:07
про диапазоны не скажу, надо в доки лезть про группировке

Dmitry
10.06.2018
15:10:41
ок, спс
пойду фигачить :)

Nick
10.06.2018
15:12:22
реальное ускорение кстати сможете получить, если добавите услвоие для docDownloadDate, например работаем с доками загруженными не раньше неделю назад
и если у вас не много дкоов обновляется (порядка как раз 10к из обещго объема в 2кк) то будет прирост

Dmitry
10.06.2018
15:13:40
в общем главное - сузить воронку перед expr?

Nick
10.06.2018
15:14:17
именно

Dmitry
10.06.2018
15:14:44
понял, большое спасибо за помощь

Google

Nick
10.06.2018
15:24:03

Peter
12.06.2018
07:35:55
Вопрос, когда делаю insert в базу(js Mongodb Driver), нужно сделать auto increment поля, как это можно реализовать? Знаю при update можно $inc, но мне нужно при insert
И ещё вопрос, есть ли способ в агрегатке string в objectId перевести? Для lookup

Artem
12.06.2018
12:17:42
Камрады, сегодня с 19.00 до 21.00 организуем стрим посвященный шардингу, попытаемся разобрать вопросы по выбору ключей, борьбе с монотонностью и если успеем, поднимем кластер на тестовой среде.
https://youtu.be/JH3Pusw1aZg