Nick
Anton
Anton
вот подсказка как надо писать точно также описано и в доке
Anton
но почему то красным подчеркивает
Anton
и возвращает ноль обектов
Nick
Ну вот и спасибо мега помощник
Была бы проблема с формированием запроса, то это к монге. В вашем случае проблема в коде и вам надо сначала надо научиться его писать и отлаживать. Глупо рассчитывать на то что без указания языка, драйвера, ссылок на полный код, минимального описания бизнес задачи ктото телепатически это все выяснит и даст ответ
Anton
Nick
На каком сайте?
Nick
Ссылки в студию
Anton
Там где коллекции
Nick
Anton
Наверно правильно его назвать Атлас, да
Nick
Используется ли вами atlas search для поиска?
готка
Добрый день, Люди, подскажите пожалуйста, почему у меня в $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
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
готка
ну там сама база где-то на второй версии поднята, в общем, так получилось)
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 какой тип данных в поле и везде ли он одинаков?
готка
в 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
проверьте чтоб наверняка, если строка, то тогда может быть и такое поведение
Nick
готка
Проверил, таки строка, но циферки в ней. Сейчас еще на всякий перепроверю, может в других случаях были nubmer
Вячеслав
Всем привет, может кто помочь, настраивают CDC к mongodb и чтение чендж сетов не работает, сразу получаю ошибку resume of change stream was not possible, as the resume token was not found . Размер оплога большой, интенсивность изменения данных маленькая.
Nick
готка
Nick
Илья
можно ли делать $lookup по новому полю из $lookup в одной агрегации (запропросе) ?
$lookup: { as: 'product'},
$addFields: { productIDs: "$product._id",}
$lookup: {localField: "productIDs",}
Nick
Илья
да
спасибо, похоже нужно было id перевести в string
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 до нужного поля, то это должно сработать. Но нет, не работает. Вопрос: это оно так концептуально не работает (ну то есть и не должно)? Или я просто что-то не так делаю?
Ежики плакали, кололись, но продолжали есть кактус
Массив больше чем на один уровень имеет смысл только для случая, когда вы с такой структурой работаете на уровне приложения полностью доставая и полностью меняя. Попытки сделать чтото с такой структурой с помощью средств самой БД практически обречены на излишне сложные запросы или вообще невозможные как в вашем случае
Egor
Nick
Maxmudjon
Приветсвую всем, есть база монго с много данными, я хочу сделеть репликация монго. Вопрось как сделеть репликация инстанса А с данними чтобы инстанс Б пустой скопировал данные с инстанса А или всё это под капотом так и работает?
Anna
Всем привет! Подскажите пожалуйста хорошую книжку по mongodb
Nick
Nick
Vladimir
Andrey
Egor
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
yopp
yopp
хмм, возможно или в запросе или в примере документов какие-то ошибки. посмотрите пожалуйста что в редакторе слева? строки с ошибками должны быть отмечены красными
Egor
yopp
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 сорре, так вот норм как в предыдущем сообщении?
yopp
Nick
имелось в виду если это уже не первая проблема изза вложенных массивов на которую вы напарываетесь, то наверное надо бы начать пересматривать подход к хранению. И да это нормально выбирать не подходящий инструмент в начале пути.
А технических ограничений везде хватает и это вполне нормально на определенном этапе развития проекта не просто пересмотреть структуру хранения, а может даже поменять используемые инструменты и переписать большую часть кода лишь бы иметь возможность исполнять хотелки бизнеса
Vladimir
Вопросик, не могу прийти к решению, возможно ли в агрегации построить аналогию someString.containsAll(arrayOfStringParts) ?
Nick
Vladimir
В общем пошёл другим путем из массива строк делаю регулярку а далее ее использую на полях
Desalutar
Не понимаю почему в поле productInfo попадает пустой массив
[{
$match: {
user: ObjectId('65bc99b28dd5810a5d44adb5')
}
},
{
$unwind: "$products"
},
{
$lookup: {
from: "Product",
localField: "products.product",
foreignField: "_id",
as: "productInfo"
}
}
]
Может кто подскажет что не так ?
Nick
Desalutar
Nick
Aram
yopp
На мой взгляд вам будет проще разделить этот объект две или три коллекции:
transponder, channel и pid
У вас и запросы с глубокой вложенностью и сами объекты достаточно большие
Egor
Илья
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
Можно ли использовать для написания облачных функций котлин? Или только тайпскрипт?
Koliy82
Здравствуйте, купил новый хост подешевле и хочу перенести туда монго, но у рута, который создаётся в монго почему-то нет прав (Не создать бд, не показывает созданные), хотя использую docker-compose.yml тот же, что и использовал на старом сервере. Он должен создавать из переменных MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD рут-пользователя со всеми правами, но прав у него нет.
Koliy82
Нуриддин
Почему у тебя ошибки по поводу репликации
Нуриддин
А на праймари rs.status() что говорит о сервере на который переезжаешь?