Aleksey
наверное это роляет
yopp
Вооот
SvPupok
когда то мы имели беседу с чуваками из microsoft-а, за очень большой рюмкой чая, и они много чего порассказывали про облачные мифы))))))
yopp
Да, есть черта после которой дешевле уже свою инфраструктуру содержать
yopp
Computing cloud, когда тебе просто вычислительную мощность дают это одна история. Тебе все ещё надо строить инфраструктуру вокруг. А вот service cloud, другая история. Тот-же атлас — офигительно для старта. Пусть и кажется что дорого, но на деле они снимают УЙМУ проблем. Если посчитать затраты на содержание кластера своими силами, то выйдет дороже
SvPupok
согласен
yopp
А черту всегда лучше посчитать заранее, кстати. Чтоб понять когда пришла пора закладывать в capex затраты на замену атласа, на свою инфраструктуру.
yopp
Причём ничего не мешает сначала поехать на computing cloud, а потом на арендованное железо, а потом на своё железо в чужой стойке и в итоге на свой цод
pinelover
В принципе никаких подводных камней
да, нашел библу mongoosastic для синхронизации, вроде как полет нормальный
Anton
Всем привет! Помогите плиз Есть коллекция projects. Есть коллекция applications (отклики на проекты) Applications имеет поле projectID (string) Хочу вывести проекты со списком откликов, если есть. Делаю так: $lookup: { from: 'applications', localField: '_id', foreignField: 'projectId', as: 'applications' } Не работает, так как в projectId - это строка (если сунуть туда ObjectId - работает). Как быть?
Oleg
dbref
Oleg
https://docs.mongodb.com/manual/reference/database-references/
Oleg
должно подойти, если я правильно понял задачу
Anton
ну это переделка схему нужна. С существующей схемой никак не вытащить?
Oleg
смысл этой агрегации, что localField и foreignField должны быть одного типа
Oleg
а так у тебя выходит ObjectId и string
Oleg
надо чтоб string string или ObjectId ObjectId
Oleg
но возможно это как-то можно решить :) помог, чем знаю
Oleg
гугл говорит отрицательно
Oleg
https://stackoverflow.com/questions/41689349/how-to-convert-string-to-objectid-in-localfield-for-lookup-mongodb
Petro
Быстрый вопрос, $push в $group сохраняет порядок документов? к примеру я сначала делаю $sort: {name: 1} потом $group:{_id: null, result: {$push: ‘$$ROOT’}}
Max
а кто-то знает, как получить/посмотреть в монге кол-во зашедуленых RangeDelete ? Суть в том, что сейчас монга не двигает чанки из-за Chunk move failed :: caused by :: ChunkRangeCleanupPending: can't accept new chunks because there are still 12 deletes from previous migration и вот это количество бы как-то отслеживать и вытащить в мониторинг. Есть возможность в монгу запрос всунуть? в currentOp() видно один RangeDeleter, этого несколько маловато...
ᅠ ᅠ ᅠ ᅠ
ребят, у кого-то была такая ошибка? com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message}, caused by {java.net.SocketTimeoutException: Read timed out}}] Может подскажете, как решали...
Alexandr
Народ, запрос на добавление в массив поддокументов вместе со $slice -12890 будет сильно ресурсы жрать? Ожидается таких запросов около сотни последовательных раз в 10 минут
Anonymous
привет
Anonymous
подскажите как, например, посчитать сколько комментариев имеет каждый пост. например, у нас есть список айдишников постов, нужно получить количество комментариев каждого
Alexandr
Смотря как комментарии хранятся
Anonymous
в отдельной коллекции
yopp
в отдельной коллекции
Aggregation framework: в коллекции комментариев Match с in по массиву id постов group по id постов с sum: 1
Anonymous
спасибо
Артем
парни как взять первый элемент из группы?
Артем
db.grades.find().sort({student_id: 1, score: 1}) вот теперь из него нужно сгруппировать по полю student_id, и взять первый элемент
ᅠ ᅠ ᅠ ᅠ
авторизация вкл?
нет. я решил проблему добавив в конфиг пару строчек: replication: replSetName: "rs0" net: bindIp: localhost,<IP>
Viktor
Есть findOne
SvPupok
cursor.limit() не поможет?
Артем
С каждой группы по 1 элементу
Артем
А ваши варианты просто 1 элемент вернет
rdcm
https://docs.mongodb.com/manual/reference/operator/aggregation/facet/
ᅠ ᅠ ᅠ ᅠ
делаю запро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 }
Артем
ты че проходишь курсы по монго?))
ᅠ ᅠ ᅠ ᅠ
{_id:0, homework:1}
спасибо, а почему мой вариант не сработает?
ᅠ ᅠ ᅠ ᅠ
если вынести в отдельные скобки, допустим?
Nick
посмотрите спеку на метод find
Nick
и что там значит 3 объект
Старый
Дак редис
😂мастабирвоание - пока данные, перенос - пока данные, распределённость, вообще не существует
Dmitry
Всем привет, 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 тупит :( может кто-то сталкивался?
Dmitry
ну и вообще вопрос по $expr и сравнении двух полей одного докумнта: mongodb никак не хочет использовать для этого индексы, добавить partialindex на это выражение я так понял тоже нельзя...
Dmitry
если слишком нагло ворвался - плиз сильно не бейте :)
Nick
чтобы проверить факт использования индексов или их не использования нужно дернуть explain(executionStats) может улучшит понимание https://docs.mongodb.com/manual/reference/method/cursor.explain/#cursor.explain
Nick
ну и вообще вопрос по $expr и сравнении двух полей одного докумнта: mongodb никак не хочет использовать для этого индексы, добавить partialindex на это выражение я так понял тоже нельзя...
вообще то что вы ищете называется примерно Expression Indexes, такого в монге нет. Но вы можете самостоятельно вычилят ьи сохранят ьв документе результат а его уже индексирвоать
Dmitry
вообще то что вы ищете называется примерно Expression Indexes, такого в монге нет. Но вы можете самостоятельно вычилят ьи сохранят ьв документе результат а его уже индексирвоать
да, проблема в том что я каждые N дней должен делать upsert всех документов с новой датой, чтобы посчитать все нужно будет снова обходить каждый документ, а их 10+ миллионов...
Nick
вот это вот upsert какая вцелом логика? ну там обновление каталога товаров и проставление актальных данных
Dmitry
вот это вот upsert какая вцелом логика? ну там обновление каталога товаров и проставление актальных данных
все что нужно - обновить метаданные документов: у каждого есть дата последней публикации и ссылка на сам текст. По дате публикации я должен понять скачал ли я уже текст или нет, нужно ли мне обновить текст (если дата публикации старше даты скачивания) или нет
Dmitry
но "executionTimeMillis" : 117415,
Nick
закиньте в гист каконить
Dmitry
закиньте в гист каконить
https://gist.github.com/t4ec/61bc15db83f89b95ee1dea0f5e621aba
Nick
собственно проблема что у вас под docParsedSuccessfully=true попадает очень много доков, и монга собственно их все прочитывает
Nick
нужен простой способ исключать полностью обработанные доки из выборки
Dmitry
просто на данном этапе мне реально нужно получить почти все документы из базы...
Dmitry
но почему если убрать этот флаг монга быстрее работает?
Nick
чтото не заметно, из 2кк вас интересует лишь 10к
Dmitry
если я просто делаю запрос который внутри "$or" отрабатывается раз в 10 быстрее
Nick
а вополните второй запрос котоырй "быстрее" с эксплейном
Nick
и так же в гист
Dmitry
черт, я убрал индекс и использовал partial для теста, сейчас добавлю и проверю...
Dmitry
это не касается предыдущего результата, просто я добавить partial для docParsedSuccessfully=true, если его убрать из запроса идет COLLSCAN
Nick
походу тут полюбому лажа, т.к. $expr не умеет использовать индексы и нет возможности ограничить предварительно выборку, то проблемы не избежать
Nick
если это реально критично, то стоит пересмотреть структуру данных и добавлять флаг
Nick
а то что без второго условия отрабатывает быстрее, то это именно поулчение 10к доков или время до того как монга чтото ответит и выдаст курсор?
Dmitry
а то что без второго условия отрабатывает быстрее, то это именно поулчение 10к доков или время до того как монга чтото ответит и выдаст курсор?
до получения курсора, но я сейчас тестирую и что-то тоже туго, возможно я что-то напутал, тестировал еще утром
Dmitry
мда, печалька
Nick
я уверен что запрос без docParsedSuccessfully у вас просто возвращает курсор с частью данных, а полная выборка до момента, когда все прочтете из курсора будет сопоставима по времени как и с флагом