Nick
а что за idVar
любая ваша переменная или константа
of Astora 𒉭
любая ваша переменная или константа
оно ведь идёт с рек куери
Nick
оно ведь идёт с рек куери
откуда вы его возьмете неважно
Дмитрий
Всем привет. есть коллекция данных, есть периодическая операция над данными. во время начала работ берем n данных и работаем с ними. паралельно могут быть запущены другие задачи. в реляционных базах использовал select for update и статусную модель для изменения статуса в начале, последующие задачи фильтруют данные по статусам. как лучше реализовать такой процесс работы с mongodb
Alex
Всем привет! Есть скрипт запускающий бд, который выглядит примерно так: docker-compose -f "docker-compose.yml" up -d ... mongo1 docker-compose -f "docker-compose.yml" up -d ... mongo2 echo "Waiting for MongoDB to start..." sleep 5 ... Как вы могли понять sleep 5 не справляется с ожиданием. Иногда получаем ошибки из-за того, что база не запустилась как надо. Нужен какой-нибудь простой способ дождаться полноценного запуска базы, может wait-for скрипт или еще что-нибудь. Знает кто-нибудь подобающий способ?
Alex
В этом случае depends_on не поможет, там не другой контейнер ждёт базу, а bash скрипты.
lmn
ну так и почитайте про тот же wait в баше
of Astora 𒉭
поиск по подтягиваемым значениям https://mongoosejs.com/docs/populate.html#query-conditions
перепробовал множество вариантов, не подтягиваются, идёт null
Dmitry
чекнуть доступность порта 27017 простейшим скриптом nc -z <host> <port>?
Перейди в браузере [localhost | IP]:27017 , оно должно выдать страницу, что по http не работает.
Andrew
Привет всем, подскажите плиз, есть lookup, где я использую аттрибут который до этого сделал unwind, все работает, но если у меня на входе изначально был пустой массив и поле не создается, то дальше вся аггрегация не отрабатывает... как можно обработать случай если изначально массив пустой? Спасибо!
KiR
Перейди в браузере [localhost | IP]:27017 , оно должно выдать страницу, что по http не работает.
А причем тут http? ) Я предлагаю товарищу просто проверить доступность порта, чтобы определить готова монга или нет
Dmitry
А причем тут http? ) Я предлагаю товарищу просто проверить доступность порта, чтобы определить готова монга или нет
Так если монга успешно запущена и готова прослушивать запросы, то если обратиться через http, выдаст ошибку, что через http нельзя
KiR
Так если монга успешно запущена и готова прослушивать запросы, то если обратиться через http, выдаст ошибку, что через http нельзя
Это понятно, ему то автоматически скриптом проверять надо, как я понял. Впрочем если он вернётся, наверное расскажет
Alex
Да, мне нужно автоматически, скриптом. Такие скрипты обычно пишутся нормальными ребятами, какими-нибудь девопсами или сис админами, отдельно. Надеялся, что здесь, у частых пользователей монги что-нибудь подобное завалялось, или есть альтернатива, но кажется зря надеялся.
Nick
Привет всем, подскажите плиз, есть lookup, где я использую аттрибут который до этого сделал unwind, все работает, но если у меня на входе изначально был пустой массив и поле не создается, то дальше вся аггрегация не отрабатывает... как можно обработать случай если изначально массив пустой? Спасибо!
Анвинд порождает новый док на каждый элемент массива, если массив пуст, то и породить ничего не сможет. Увы тут вариантов немного, кроме добавления некоего объекта если массив пустой на стадии перед анвиндом, либо менять подход и пайплайн, ну или кардинально посмотреть как можно изменить формат хранения, чтобы убрать такие проблемы сейчас и в будущем
Роман
Можно как-то в монге вычислить пересечение массивов? Есть 2 запроса: db.accounts.find({_need_remove: true}, {_id: 1}) db.accounts.find({parentId: {$exists: true}}, {parentId: 1, _id: 0}) Получаем 2 списка с id, надо вернуть id, которые есть в обоих списках
Runet
Всем привет. Оч. давно не работал с mongo Ничего не помню) Накидал запросик, но из lookup ничего не подтягивается. В первой коллекции есть запись: { "application_id" : "3391", "country_id" : "140", "count" : "200"} Во второй { "application_id" : "3391", "client_id" : "0", "country_id" : "0", "cost" : "30.0"} Задача подтянуть к документу из первой коллекции, все документы из второй (по заданным условиям). пока вот на паре записей тренеруюсь ... Запрос db.firstCollection.aggregate([ {$project: {_id: 0}}, {$match:{application_id:"3391"}}, { $lookup:{ "from":"secondCollection", "let":{ "application_id":"$application_id", "country_id":"$country_id", "client_id":"$client_id" }, "as":"joined_result", "pipeline":[ { $match:{ $expr:{ $and:[ {$eq:["$application_id","$$application_id"]}, {$or: [ {$eq:["$country_id", "$$country_id"]}, {$eq:["0","$$country_id"]} ] }, {$or: [ {$eq:["1","$$client_id"]}, {$eq:["0","$$client_id"]} ] } ] } } }, ] } }, ]); В итоге из первой коллекции запись вытаскивает, а из второй ничего нет.
Runet
Забыл добавить, не отрабатывает по факту это условие: {$or: [ {$eq:["$country_id", "$$country_id"]}, {$eq:["0","$$country_id"]} ] }, {$or: [ {$eq:["1","$$client_id"]}, {$eq:["0","$$client_id"]} ] } где то я тут накосячил без $or все ок
Runet
Все, разобрался :)
Egor
Привет. Нашел sql иньекцию. Подскажите, как можно получить имя таблицы, или бд, или список полей? Сколько не пробую, всегда пишется ошибка запроса без упоминания названия таблицы.
mike
очень здорово
Egor
Egor
это же она?
Shuliar
MariaDB != MongoDB =)
Egor
там на пхп запросы просто написаны с обычной конкатенацией строк походу
Egor
MariaDB != MongoDB =)
а, черт побери)
Egor
а есть чат по мариа дб?)
Egor
понял, спасибо
Антон
Всем день добрый, можете подсказать, где почитать о кластеле и горизонтально и маштабировании за счёт добавления новых серверов? Есть встроенный функционал ?
Nick
Есть репликация - увеличение возможностей чтения и доп плюшки по стабильности https://www.mongodb.com/docs/manual/replication/ Есть шардирование - увеличение возможностей как чтения так и записи https://www.mongodb.com/docs/manual/sharding/
Дима
Добрый вечер, есть две схемы, с постами ```const PostScheme = new mongoose.Schema( { title: { type: String, required: true, }, viewsCount: { type: Number, default: 0, }, comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }], }, { timestamps: true } )``` И с комментариями ```const CommentScheme = new mongoose.Schema( { post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' }, text: { type: String, required: true }, author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, }, { timestamps: true } )``` Я хочу отсортировать по дате комментарии в определенном посте, как мне это сделать ?
Dmitry
То ли сразу sort можно написать, то options и в нём sort
Serb
Привет, в доке не нашëл. Есть структура вида: { "_id": int, "captcha": { "channel": int, "role": int }, "voice": { "lobbies": list[int], "roles": list[int] } } Как мне обновлять такую структуру? Я пробовал updateOne, Но такой подход как бы стирает старые значения словаря captcha и добавляет новые. А мне нужно обновить существующие или , если таких нет - добавить новые
Serb
На данный момент пользуюсь каким-то костылëм... Делаю запрос findOne, в переменную сохраняю данные вложенного словаря, обращаюсь к конкретному его содержимому и задаю новое значение, потом передаю эту переменную в updateOne
Serb
Какой запрос?
Как у меня выглядит updateOne?
Serb
settings.updateOne({"_id": 1234}, {"$set": {"captcha": { "channel": 4637273674, "role": 327374748 } } }) Ну тут типа очевидно, что работать будет не так, как нужно, оно ведь просто установит (set) значение капчи в переданное значение...
Serb
Думал можно через $inc но прочитал, что это только для integer
Serb
Бл*
Serb
db.c.update( {"name": "toyota" }, {"$set": {"size.height":8} } )
Serb
Это мне надо, да?
Yaroslav
db.c.update( {"name": "toyota" }, {"$set": {"size.height":8} } )
https://www.mongodb.com/docs/manual/reference/operator/update/#std-label-update-operators-processing-order Скорее всего у тебя монга 4 версии, в таком случае надо делать так как ты описал
Yaroslav
Это поведение монги такое
Yaroslav
Либо обнови ее
Yaroslav
Т.е. перчеслять конкретно вложенные поля в netsted объекте
Serb
Спасибо
Yaroslav
В populate можно сортировку подкинуть
Ты хочешь именно отсортировать populate ?
Yaroslav
То ответ сразу, так нельзя. Тогда надо делать запрос именно от документа который нужно сначала отсортировать, а уже потом к нему populate добавить
Dmitry
Ты хочешь именно отсортировать populate ?
Если он хочет сделать на стороне БД, то может в populate прокинуть sort, а если уже у себя, то может встроенной функцией sort воспользоваться.
Dmitry
У него просто лежат objectid и пока он не сделает populate, то ему нечего сортировать.
Dmitry
Прям сразу в Example представлен пример с сортировкой по имени
Yaroslav
Да, но также был issue в монгусе, который не правильно сортировал эти поля. Я глянул, вроде как пофиксили. Так что скорее всего, как ты описал будет работать корректно
Dmitry
Да, но также был issue в монгусе, который не правильно сортировал эти поля. Я глянул, вроде как пофиксили. Так что скорее всего, как ты описал будет работать корректно
У них бывают случаи когда ломается код. Не помню, какой именно из параметров использовался в find, но забавно было, что в последней версии 5.X.X работало, а начиная с 6.0.0 перестало. Мб они уже и исправили, но тогда это было не много неожиданно и пришлось использовать альтернативный способ.
Kas
{ param_vals: { '633c1d36a63179dd05751801': [ 'M60B40' ], '633c1cdea63179dd057517ff': [ 'Механика' ] } } db.c.updateMany( {}, {$pull: {param_vals: {'633c1cdea63179dd057517ff': 'Механика'}}} ) Всем привет, пытаюсь удалить значение “Механика” из массива. Результат моего запроса ошибка: Cannot apply $pull to a non-array value. Можете подсказать где моя ошибка?
Serb
Исходя из ошибки: pull предназначен только для array типа. Это в принципе всë чем я могу помочь 😂
Константин
$unset не помогает решить проблему?
Kas
Проблема решена, спасибо. Вот рабочий запрос db.catalogReferences.updateMany({}, {$pull: {'param_vals.633c1cdea63179dd057517ff': 'Механика'}})
Pavel
Добрый вечер, коллеги! Подскажите пожалуйста, я что то затупил, условие будет неявным И или ИЛИ если в критерии будет записано что то типо { active: { $eq: 1}, id: { $in : [1,2,3,4]} } Он выберет активные из тех что совпажают с ID или он выберет все id не зависимо от их активности?
Sanyok037
Приветствую! Подскажите, пожалуйста, я могу запустить как-то query через терминал без приложений для БД?
Sanyok037
(линух)
lmn
Естессна. В доках обычно такие примеры и есть
Sanyok037
Естессна. В доках обычно такие примеры и есть
Пасиб)) Суть в том, что я делаю извращение используя ansible и когда пробую заюзать одну и ту же команду через DataGrip и через ансибл (модуль community.mongodb.mongodb_shell), то ансибл выдаёт ошибку invalid iso date 🐸
Sanyok037
Хочу как-то прикрутить это дело обычным модулем шел
Sanyok037
Авось сработает))
Sanyok037
загадка от фака жреско. почему в DataGrip работает, а чз консоль - нет?( db.getSiblingDB("demo_billing").getCollection("subscribers").deleteMany({from:{$gte: new ISODate(ISODate().getTime() - 540 * 24 * 60 * 60 * 1000)}})
Sanyok037
консоль говорит: uncaught exception: Error: invalid ISO date: 1618245097732