Anton
Ну вот и разбирайтесь почему фильтр пустой
Ну вот и спасибо мега помощник
Anton
вот подсказка как надо писать точно также описано и в доке
Anton
но почему то красным подчеркивает
Anton
и возвращает ноль обектов
Nick
Ну вот и спасибо мега помощник
Была бы проблема с формированием запроса, то это к монге. В вашем случае проблема в коде и вам надо сначала надо научиться его писать и отлаживать. Глупо рассчитывать на то что без указания языка, драйвера, ссылок на полный код, минимального описания бизнес задачи ктото телепатически это все выяснит и даст ответ
Nick
На каком сайте?
Nick
Ссылки в студию
Anton
На каком сайте?
Скриншот из облака Mongo db
Anton
Там где коллекции
Anton
Наверно правильно его назвать Атлас, да
Nick
Используется ли вами atlas search для поиска?
Anton
Используется ли вами atlas search для поиска?
Нет наверно , я сейчас сижу на вкладке коллекции
Nick
но почему то красным подчеркивает
тут красного ничего не вижу, и 20 объектов возвращено
Nick
но почему то красным подчеркивает
наконецто добрался до атласа, все так корректно работает. Вы точно дожидаетесь результатов выборки?
готка
Добрый день, Люди, подскажите пожалуйста, почему у меня в $out сохранилось значение, которое фактически не $max: "$47", а меньше. Вот данные 45 46 47 blondiewondie:56279720:177 blondiewondie:56279720:123 А в $out blondiewondie,56279720,79 db.res.aggregate([ { $group: { _id: "$46", max47: { $max: "$47" }, doc: { $last: "$$ROOT" } } }, { $project: { _id: "$doc._id", "45": "$doc.45", "46": "$doc.46", "47": "$max47", "48": "$doc.48", "49": "$doc.49", "groups": "$doc.groups" } }, { $out: "новая_коллекция" } ], { allowDiskUse: true }) Причем, для большинства случаев это условие было выполнено. Mongodb cosmos 1.28.4
готка
ну там сама база где-то на второй версии поднята, в общем, так получилось)
готка
в 47 какой тип данных в поле и везде ли он одинаков?
/* 1 createdAt:1/31/2024, 10:23:04 AM*/ { "45" : "jalenrules", "46" : "222406722", "47" : "0", "48" : "[\"EN\"]", "49" : "null", "_id" : ObjectId("65ba1f889f9c7b331ec199da"), "groups" : [ ] }, Я так понимаю число
готка
или строка цифры
готка
А само выражение применяю в NoSQLBooster for MongoDB 6.2.17 )) Потому что не получилось в этом космосе
Nick
проверьте чтоб наверняка, если строка, то тогда может быть и такое поведение
готка
Проверил, таки строка, но циферки в ней. Сейчас еще на всякий перепроверю, может в других случаях были nubmer
Вячеслав
Всем привет, может кто помочь, настраивают CDC к mongodb и чтение чендж сетов не работает, сразу получаю ошибку resume of change stream was not possible, as the resume token was not found . Размер оплога большой, интенсивность изменения данных маленькая.
готка
тогда вам надо внутри $max преобразовать к числу сначала
{ allowDiskUse: true }) не способно повлиять на это, без него не запускается даже)
Илья
можно ли делать $lookup по новому полю из $lookup в одной агрегации (запропросе) ? $lookup: { as: 'product'}, $addFields: { productIDs: "$product._id",} $lookup: {localField: "productIDs",}
Илья
да
спасибо, похоже нужно было id перевести в string
Egor
Всем привет! Опять у меня вопрос по фильтрации вложенных на несколько уровней массивов. Итак, есть у меня документ. У него внутри есть массив channels и внутри каждого из channels есть массив pids. Я освоил трюк c $filter для массивов. Я даже делаю его два раза (на уровне channels и на уровне pids) последовательно в разных $project stage и он отлично работает. Но, от бизнеса поступает указание, что значения в pids использовать для фильтрации надо, но сами элементы массива pids убирать НЕ надо. Хорошо, убираю стейдж фильтрации pids и пытаюсь в $cond для channels $filter вставить что-то типа {$eq: ["$$channel.pids.codec", "h264"]} (обратили внимание на стандартный метод доступа к элементу вложенного массива?). И вот так вот уже НЕ работает. То есть перестает channels фильтровать вообще. Сам документ достает правильно. А channels уже не фильтрует. То есть я ожидал, что если я "провалюсь" от уровня channel через его pids до нужного поля, то это должно сработать. Но нет, не работает. Вопрос: это оно так концептуально не работает (ну то есть и не должно)? Или я просто что-то не так делаю?
Nick
Всем привет! Опять у меня вопрос по фильтрации вложенных на несколько уровней массивов. Итак, есть у меня документ. У него внутри есть массив channels и внутри каждого из channels есть массив pids. Я освоил трюк c $filter для массивов. Я даже делаю его два раза (на уровне channels и на уровне pids) последовательно в разных $project stage и он отлично работает. Но, от бизнеса поступает указание, что значения в pids использовать для фильтрации надо, но сами элементы массива pids убирать НЕ надо. Хорошо, убираю стейдж фильтрации pids и пытаюсь в $cond для channels $filter вставить что-то типа {$eq: ["$$channel.pids.codec", "h264"]} (обратили внимание на стандартный метод доступа к элементу вложенного массива?). И вот так вот уже НЕ работает. То есть перестает channels фильтровать вообще. Сам документ достает правильно. А channels уже не фильтрует. То есть я ожидал, что если я "провалюсь" от уровня channel через его pids до нужного поля, то это должно сработать. Но нет, не работает. Вопрос: это оно так концептуально не работает (ну то есть и не должно)? Или я просто что-то не так делаю?
Ежики плакали, кололись, но продолжали есть кактус Массив больше чем на один уровень имеет смысл только для случая, когда вы с такой структурой работаете на уровне приложения полностью доставая и полностью меняя. Попытки сделать чтото с такой структурой с помощью средств самой БД практически обречены на излишне сложные запросы или вообще невозможные как в вашем случае
Nick
Ну то есть лучше разделять исходный документ на две коллекции (в данном случае) и потом $lookup'ить?
смотря что будете делать, если аналитика, то можно например просто сделать более плоскую структуру с дублирвоанием инфы
Nick
Ну то есть лучше разделять исходный документ на две коллекции (в данном случае) и потом $lookup'ить?
главное продумать получше, а то возможно с лукапами будет еще хуже
Maxmudjon
Приветсвую всем, есть база монго с много данными, я хочу сделеть репликация монго. Вопрось как сделеть репликация инстанса А с данними чтобы инстанс Б пустой скопировал данные с инстанса А или всё это под капотом так и работает?
Anna
Всем привет! Подскажите пожалуйста хорошую книжку по mongodb
Nick
yopp
Всем привет! Опять у меня вопрос по фильтрации вложенных на несколько уровней массивов. Итак, есть у меня документ. У него внутри есть массив channels и внутри каждого из channels есть массив pids. Я освоил трюк c $filter для массивов. Я даже делаю его два раза (на уровне channels и на уровне pids) последовательно в разных $project stage и он отлично работает. Но, от бизнеса поступает указание, что значения в pids использовать для фильтрации надо, но сами элементы массива pids убирать НЕ надо. Хорошо, убираю стейдж фильтрации pids и пытаюсь в $cond для channels $filter вставить что-то типа {$eq: ["$$channel.pids.codec", "h264"]} (обратили внимание на стандартный метод доступа к элементу вложенного массива?). И вот так вот уже НЕ работает. То есть перестает channels фильтровать вообще. Сам документ достает правильно. А channels уже не фильтрует. То есть я ожидал, что если я "провалюсь" от уровня channel через его pids до нужного поля, то это должно сработать. Но нет, не работает. Вопрос: это оно так концептуально не работает (ну то есть и не должно)? Или я просто что-то не так делаю?
Если есть возможность, положите пример запроса на play.db-ai.dev? Мне кажется что вы неверно в самом запросе задаёте фильтр для массива
Egor
Если есть возможность, положите пример запроса на play.db-ai.dev? Мне кажется что вы неверно в самом запросе задаёте фильтр для массива
А оно должно какую-то ссылку уникальную сгенерить, по которой Вы сможете увидеть то, что я вставил?
Egor
Если вот сюда нажать скопирует ссылку для шаринга
Вроде только очки протер, а все равно Public Link не вижу
yopp
хмм, возможно или в запросе или в примере документов какие-то ошибки. посмотрите пожалуйста что в редакторе слева? строки с ошибками должны быть отмечены красными
yopp
Красный крестик присутствует, только я ш из Compass'а все скопировал, а в нем все норм
там парсер на висящие "," ругается (это тоже надо поправить)
yopp
бросьте в группу файлом, я поправлю
Egor
[ { $match: { channels: { $ne: { $size: 0, }, }, }, }, { $match: { channels: { $ne: null, }, }, }, { $match: { channels: { $exists: true, }, }, }, { $match: { snrStatus: "yellow", // тут просто фильтерим на самом верхнем уровне, все чудесно }, }, { $project: { satName: 1, scanId: 1, snrStatus: 1, info: 1, timestamp: 1, channels: { $filter: { input: "$channels", as: "channel", cond: { $and: [ { $eq: [ "$$channel.channelNumber", // вот тут все работает зашибись! 123, ], }, { $eq: [ "$$channel.pids.resolution", // а вот тут уже не работает... "1920x1080", ], }, ], }, }, }, }, }, ]
Egor
@dd_bb сорре, так вот норм как в предыдущем сообщении?
Nick
имелось в виду если это уже не первая проблема изза вложенных массивов на которую вы напарываетесь, то наверное надо бы начать пересматривать подход к хранению. И да это нормально выбирать не подходящий инструмент в начале пути. А технических ограничений везде хватает и это вполне нормально на определенном этапе развития проекта не просто пересмотреть структуру хранения, а может даже поменять используемые инструменты и переписать большую часть кода лишь бы иметь возможность исполнять хотелки бизнеса
Vladimir
Вопросик, не могу прийти к решению, возможно ли в агрегации построить аналогию someString.containsAll(arrayOfStringParts) ?
Nick
Вопросик, не могу прийти к решению, возможно ли в агрегации построить аналогию someString.containsAll(arrayOfStringParts) ?
$and а под ним массив из условий проверки вхождения подстроки регуляркой
Vladimir
В общем пошёл другим путем из массива строк делаю регулярку а далее ее использую на полях
Desalutar
Не понимаю почему в поле productInfo попадает пустой массив [{ $match: { user: ObjectId('65bc99b28dd5810a5d44adb5') } }, { $unwind: "$products" }, { $lookup: { from: "Product", localField: "products.product", foreignField: "_id", as: "productInfo" } } ] Может кто подскажет что не так ?
Nick
Aram
Не правильно указал from, mongo в конце добавляет s)
Это всё можно настроить, когда схему объявляешь
yopp
@dd_bb сорре, так вот норм как в предыдущем сообщении?
Насколько я понял ваш кейс, то вы хотите вот так? https://play.db-ai.dev/m/Zb0RBFGSiAABuc5z
yopp
На мой взгляд вам будет проще разделить этот объект две или три коллекции: transponder, channel и pid У вас и запросы с глубокой вложенностью и сами объекты достаточно большие
Not Mascara
Всем привет. Не могу разобраться, как сделать корректным пайплайн. Есть коллекция a с полем name, есть коллекция b с полем object.object.array, который в себе может содержать значение name. Вроде бы нужен $lookup по типу { $lookup: { from: "b", let: { look_name: "$name" }, pipeline: [ { $match: { $expr: { $in: ["$$look_name", "$object.object.array"] } } } ], as: "newArray" } } но по факту ничего не агрегирует. newArray пустой, хотя данные все есть. Помогите пожалуйста разобраться)
Norim
Здравствуйте. Как правильно добавить синхронизацию данных в группе пользователей? Что все группа получала те документы, которыми пользователь решил поделиться.
Norim
Можно ли использовать для написания облачных функций котлин? Или только тайпскрипт?
Nick
Здравствуйте. Как правильно добавить синхронизацию данных в группе пользователей? Что все группа получала те документы, которыми пользователь решил поделиться.
Правильно сесть и расписать бизнес логику, а потом реализовывать. Если хочется монгу, то язык можно выбрать любой, для которого есть драйвера, а есть для всех популярных
Koliy82
Здравствуйте, купил новый хост подешевле и хочу перенести туда монго, но у рута, который создаётся в монго почему-то нет прав (Не создать бд, не показывает созданные), хотя использую docker-compose.yml тот же, что и использовал на старом сервере. Он должен создавать из переменных MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD рут-пользователя со всеми правами, но прав у него нет.
Koliy82
Нуриддин
Почему у тебя ошибки по поводу репликации
Нуриддин
А на праймари rs.status() что говорит о сервере на который переезжаешь?