Роман
при чем тут значение переменной на уровне кода и сборка аггрегационного пайплайна?
Я написал что не разобрался как сделать условный unwind без сборки его в отдельный массив. То есть с помощью операторов самого mongo, а не js условий
Роман
Ковырял операторы $cond, if, then, else
Роман
а задача какая?
Сделать unwind для posts в зависимости от req.query
Alexandrr
Ковырял операторы $cond, if, then, else
а в чём проблема фильтр + конд? или фильтр + свитч?
Роман
Вот это я и хотел услышать
Роман
Хотел узнать как бы это сделали вы, так как у меня ощущение что я изобретаю велосипед
Alexandrr
Хотел узнать как бы это сделали вы, так как у меня ощущение что я изобретаю велосипед
тут всего 2 инструмента для этого, в этом и заключается простота и удобство монги https://www.mongodb.com/docs/manual/reference/operator/aggregation/switch/ https://www.mongodb.com/docs/manual/reference/operator/aggregation/cond/ https://www.mongodb.com/docs/manual/reference/operator/aggregation/filter/
Роман
Благодарю, ознакомлюсь
Роман
Как вам не надоело в течении такого долгого времени отвечать таким смертным как я...?
Роман
Я вас тут уже почти год наблюдаю
Alexandrr
Я вас тут уже почти год наблюдаю
интересные вопросы иногда тут попадаются, полезно для развития по теме так как я манагер на 90%, а кодерок только на 10%, в этом основная моя работа - читать чатики, обогащаться знаниями, чтобы меньше лапши кушать, которую каждый день кодерки мне пытаются на уши развесить ;) а Ник например, тут и того больше
Роман
Действительно
Роман
Своеобразный литкод или кодварс
Роман
Ещё и практика коммерческая, попробуй понять что заказчик хочет))))))
.
645bca35f7424eb305fc385c Помоч надо как анализ ето код
.
Откуда взято?
Кибер гаме
.
Откуда взято?
Как в анализ
Роман
переменная posts приходит из req.query и принимает значения 0 или 1. 0 - поле posts не возвращается, 1 - возвращается
Alexandrr
Вот в итоге к чему я пришёл
ну и надо написать ещё чатланам, что такое "$$" - что это ссылка на сам объект, последний, выделенный интерпретатором
.
645bca35f7424eb305fc385c Помоч надо как анализ ето код
Роман
Вот шарада
Askhat
Здравствуйте, подскажите как сделать сортировку по длине поля модели, только вот оператор project забирает все поля, я не хочу тупо переписывать все поля модели в project. есть способ сделать это как-то иначе?
Если актуально. Добавляешь в пайплайн стейдж $addFields, где добавляешь новое поле с подсчетом символов у поля, а затем след. стейджом делаешь $sort.
Роман
Тоже вариант
Роман
Полезно, спасибо
Askhat
$set и $addFields отличаются немного друг от друга. Будьте внимательнее при выборе
# Major4ik ☃️
Всем привет, я запустил mongodb в докере. Сейчас попытался подключится из вне к монго ну и данные получается достать. Не подскажите в каком направлении копать, чтобы закрыть доступ вообще из вне или хотя бы по паролю можно было бы подключаться?
# Major4ik ☃️
спасибо
Дмитрий
Коллеги, добрый день Подскажите, а на днях не было глобальных проблем с монгой? У нас сейчас проблемка случилась: у нас во всех коллекциях сломалась сортировка, то есть все коллекции как будто перетусовались ( Кто-то сталкивался с подобной ситуацией?
Дмитрий
Эм, сортировка это про $sort или чтото еще?
не, сами колекции перетусовались
Дмитрий
ну другими словами: ранее первым был один Юзер, а сейчас он уже 5 по счету, такая суть
Дмитрий
Порядок документов в коллекции не гарантируется
а понял, тогда значит норм) просто почти два года было норм, а вот только на днях порядок документов нарушился, в целом не критично, просто не знал об этом )
sp
Я хочу искать совпадения по входящему query параметру с значениями полей firstname, email и id у документа. 21-27 и 44 строчка. С первыми firstname и email все ок, но с id не работает. Если я пробую преобразовать id в монгусовский тип , то получаю ошибку. Кто то может подсказать пожалуйста как это фиксится?
sp
sp
как делаете преобразование в id?
Первый скрин 23 строчка
Vladyslav
Первый скрин 23 строчка
new ObjectId(id) попробуйте
Nick
Я вбиваю именно символы которые из id документа беру)
тогда просто провалитесть в метод по стектрейсу и гляньтк что там за проверки
sp
new ObjectId(id) попробуйте
добавил слово new, не завелось(
Vladyslav
добавил слово new, не завелось(
var ObjectId = require('mongoose').Types.ObjectId; var query = { campaign_id: new ObjectId(campaign._id) };
Vladyslav
то же самое
значит дело не в id
sp
Нет. В id. Если я уберу все эти преобразования в монгусовский тип на 27 строчке, то этот query параметр просто для id документов не работает, для емейлов и firstname что на 28 и 29 строчке работает
Nick
Провалился сюда и мне здесь понятнее не стало
смотрите выше по стеку в objectid:71:19
sp
смотрите выше по стеку в objectid:71:19
Да спасибо. Проблема в том что у меня в переменной req.RegExpQuery, которую я пытаюсь преобразовать в монгусовский тип, находится НЕ то что я ожидал. Направление понял
Vadzim
всем привет, у кого-нибудь был опыт обновления монго с 3 ( да и с любой другой) до 6 версии? Можете пожалуйста подсказать, на что стоит обращать внимание при обновлении , как это вообще правильно сделать( если можно, желательно расписать поэтапно типа 1. Сделать бэкап и т.д)?
Eva🇺🇦
Привет! А насколько выгодно и оптимально пользоваться mongodb cursor? Это ок вообще держать соединения дольше, чем обычный запрос, медленно кушая объекты?
Zona
Добрый день! подскажите какой оператор лучше использовать для монго в своем кубере?
Eva🇺🇦
Я думаю, что другого варианта просто нет. И файнд и агрегация возвращает курсор.
Ага, понял о чем вы. Мне нужно уточнить, что я использую, например, mongoose. find операция в монгусе дожидается возврата всей пачки. но при этом можно использовать другой вариант — через курсор. чтобы итерировать, либо превратить все в стрим данных И тут вопрос — что лучше. Пачка, или итератор? В общем, данных много, но это не проблема использовать память сервера, чтобы брать их пачкой
Eva🇺🇦
превратить во что?
итератор в nodejs стрим
yopp
Основная разница в том, как драйвер де-сериализует документы. Это в любом случае курсор, в котором batchSize (https://www.mongodb.com/docs/manual/reference/method/cursor.batchSize/) документов. Если документов меньше чем batchSize И суммарно меньше ~16Мб, то они поместятся в один пакет. Если документов больше чем batchSize, то в случае если вы не итерируете по курсору, то документы будут буфферизоваться. Для больших объёмов это менее выгодно, потому что нужна будет память и под буфер десериализованных документов (может быть большим) и под буффер логического пакета (не больше 16мб)
of Astora 𒉭
доброе утро как сделать агрегацию с $group по месяцу-дню выдает ошибку MongoServerError: Unrecognized expression '$day'
of Astora 𒉭
$dayOfMonth
спасибо
Павел
Всем привет. Есть aggregation который делает разбивку по дням и считает total для каждого дня. Вот пример: db.getCollection('test').aggregate([ {         "$group": {             "_id": {                 "$dateToString": {                     "format": "%Y%m%d",                     "date": "$creationDate",                     "timezone": "America/New_York" } },             "total": {                 "$sum": 1 } } }, {         "$project": {             "_id": 0,             "date": "$_id",             "total": 1 } } ]) Но этот запрос возвращает только те дни для которых есть данные. Можно ли как-то его изменить, чтобы для тех дней для которых данных нет, возвращалась пустышка с total = 0? Там есть фильтр по dateFrom и dateTo и в итоге мне нужно например за январь что-то типо Date Toatal 20230101 777 20230102 0 // для этого дня нет данных 20230103 888 20230104 999 20230105 0 // для этого дня нет данных .... И так до 31 января. Вот пример записи в базе { "_id" : "321", "creationDate" : ISODate("2023-01-11T17:00:00.000Z") }
Nurlan
Всем привет. Есть aggregation который делает разбивку по дням и считает total для каждого дня. Вот пример: db.getCollection('test').aggregate([ {         "$group": {             "_id": {                 "$dateToString": {                     "format": "%Y%m%d",                     "date": "$creationDate",                     "timezone": "America/New_York" } },             "total": {                 "$sum": 1 } } }, {         "$project": {             "_id": 0,             "date": "$_id",             "total": 1 } } ]) Но этот запрос возвращает только те дни для которых есть данные. Можно ли как-то его изменить, чтобы для тех дней для которых данных нет, возвращалась пустышка с total = 0? Там есть фильтр по dateFrom и dateTo и в итоге мне нужно например за январь что-то типо Date Toatal 20230101 777 20230102 0 // для этого дня нет данных 20230103 888 20230104 999 20230105 0 // для этого дня нет данных .... И так до 31 января. Вот пример записи в базе { "_id" : "321", "creationDate" : ISODate("2023-01-11T17:00:00.000Z") }
Сделайте проект сначала чтобы если нет данных ставлялись нули
Павел
Сделайте проект сначала чтобы если нет данных ставлялись нули
Вы имеете ввиду $project? Я думал, но пока без понятия как это сделать(
Павел
Именно как 0 ставить
yopp
Всем привет. Есть aggregation который делает разбивку по дням и считает total для каждого дня. Вот пример: db.getCollection('test').aggregate([ {         "$group": {             "_id": {                 "$dateToString": {                     "format": "%Y%m%d",                     "date": "$creationDate",                     "timezone": "America/New_York" } },             "total": {                 "$sum": 1 } } }, {         "$project": {             "_id": 0,             "date": "$_id",             "total": 1 } } ]) Но этот запрос возвращает только те дни для которых есть данные. Можно ли как-то его изменить, чтобы для тех дней для которых данных нет, возвращалась пустышка с total = 0? Там есть фильтр по dateFrom и dateTo и в итоге мне нужно например за январь что-то типо Date Toatal 20230101 777 20230102 0 // для этого дня нет данных 20230103 888 20230104 999 20230105 0 // для этого дня нет данных .... И так до 31 января. Вот пример записи в базе { "_id" : "321", "creationDate" : ISODate("2023-01-11T17:00:00.000Z") }
В целом простого способа заполнить пропуски в датах в монге нет. Вероятно можно попытаться через $map, $unwind и $lookup, но на мой взгляд гораздо проще и быстрее заполнить пропуски на клиенте
Павел
Похоже правда, это проще делать на клиенте. Видимо это то что мне нужно, но добавилось в монге 5.3 https://www.mongodb.com/blog/post/introducing-gap-filling-time-series-data-mongodb-5-3
Александр
Кто силен в mongodb и агрегациях в ней? Мне нужна агрегация которая из всех массивов members выносит вердикт о месте в топе. Весь массив в members получается в 56+ миллионов участников. Выполняется ну уж слишком долго. Даже с топ 10 ($limit не помогает)
Александр
вот такая бд