Нуриддин
Откатившись быстрее обновите данные с мастера
Нуриддин
Или если очень надо постоянную пересылку бэк апа
Нуриддин
Вроде в процессе этого возможно чтение и запись
Nick
Если кластер не делать, то по сути, да. Проще бекап автоматом с мастера разворачивать и делать автономные инстансы.
yopp
К сожалению выбора у меня нет, это коробочный продукт. А такой сценарий рассмативаю в смом крайнем случае. И тут не вопрос половины нод, ситуация, что если цод выпал, то системы в нем должны видеть отавшуюся в нем часть кластера, реплику.
в случае если нода не видит остальную часть кластера она будет secondary. вы на неё не сможете писать, но читать с неё всё ещё можно. Будет проблема с подключением через seedList, но вы на уровне приложения можете сделать фоллбэк на direct
yopp
писать будет нельзя, но в целом писать в таком состоянии в кластер в любом случае нельзя
Slava
Развертывание MongoDB на отдельном сервере: в контейнере или прямая установка? Всем привет, У меня был сервер, на котором MongoDB разворачивалась в контейнере. Недавно я решил перенести MongoDB на отдельный сервер. Теперь я колеблюсь между развертыванием ее в одиночном контейнере, как раньше, или установкой MongoDB и запуском программы непосредственно на новом сервере. Я ищу советы относительно того, какой метод был бы более эффективным и выгодным с точки зрения управления, производительности и простоты настройки. Буду рад услышать ваши опыты и рекомендации. Заранее спасибо!
Vadzim
Всем привет, подскажите пожалуйста оптимальное решение для такой ситуации: у меня есть одна Бд и из коллекции я выбираю нужную часть мне данных, но мне также нужно "сджойнить" записи по одному полю с записями из другой коллекции, которая находится в другой БД, можно конечно в ЯП пройтись циклом и сделать запрос в эту коллекцию, но может есть что-то более оптимальное?
Vadzim
aggregate lookup
так вроде если данные в разных БД, то это не будет работать
Назар
ааа. Наверное. В пострес я юзал dblink extension. Возможно для монго что то есть.
Vadzim
понял, спасибо, посмотрю
Али
Здравствуйте
Али
Если кто нибудь знает можете сказать как можно создавать вложенные модели в монго?
Сотрудник 236
Что значит "вложенные модели"?
Сотрудник 236
В схеме указывать имя без описания?
Али
Я уже решил проблему, а под словом вложенные я подразумевал это model1={ name:String, models2: [{type: Schema.Types.ObjectId, ref: "Model2"}] }
Slava
Здравствуйте! Тут как вам удобнее, разницы в обычной жизни вы практически не заметите
Здравствуйте, спасибо за ответ. В одном случае я разворачиваю докер всего с одним контейнером (что мне кажется входит в bad practices), а во втором устанавливаю софт с mongodb. Могут быть существенные различия: способ мониторинга, обслуживания, обновления, миграций и пр. Или я ошибаюсь? Мне очень интересно как бы поступил девопс на максималках 😅
Нуриддин
Если у вас такой потребности нет в размере монги то спокойно ставьте как вам удобнее
Nick
Здравствуйте, спасибо за ответ. В одном случае я разворачиваю докер всего с одним контейнером (что мне кажется входит в bad practices), а во втором устанавливаю софт с mongodb. Могут быть существенные различия: способ мониторинга, обслуживания, обновления, миграций и пр. Или я ошибаюсь? Мне очень интересно как бы поступил девопс на максималках 😅
Девопс на максималках не задал бы такой вопрос, т.к. имеет опыт разных инсталляций и выработал для себя как ему удобнее это менеджерить в соответствующем окружении. Так что отталкивайтесь от задач и требований и выбирайте под себя, если это допустимо
Nick
Это правельно, но поделиться опытом в данных вопросах очень полезно информативно
Контейнеры уже столько лет в ходу, что детские болячки давно полечены и выбор между контейнером и запуском напрямую стоит только в предпочтении и удобстве, различий нет (а если вдруг для вас различия в той же производительсности изза контейнеризации имеют вес, то вы уже знаете это и можете сами принять решение)
Tim
Всем привет! Подскажите, пожалуйста, можно ли в одном запросе обновить/вставить элемент в массив? Пробую с помощью позиционного оператора найти элемент в массиве и если он существует, то обновить его данные, в противном случае создать новый элемент. Вот пример моего запроса: https://mongoplayground.net/p/LYlNArEw_zJ У меня есть элемент с полями country=UK и currency=EUR, я хочу попытаться вставить в массив prices ещё один объект с полями country=UK и currency=GBP, но почему-то операция insert не срабатывает. Видимо позиционный оператор позволяет только найти элемент, но не вставляет сам элемент в массив?
Tim
Как в nodejs функцию составляешь и вставляешь туда уже интересующие запросы
Имеете ввиду, что это можно сделать только через aggregation?
Нуриддин
Имеете ввиду, что это можно сделать только через aggregation?
Так я не знаю точно возможно ли, у вас есть выход в варианте: контекст функции в которой исполняются сразу 2 или более запроса одновременно)
Tim
Так я не знаю точно возможно ли, у вас есть выход в варианте: контекст функции в которой исполняются сразу 2 или более запроса одновременно)
Хотелось бы иметь на выходе как можно более лаконичный запрос, чтоб потом не сложно было разобраться, что там происходит) С update всё выглядит довольно просто, только upsert=true не отрабатывает так, как мне хотелось бы
Nick
апсерт он про добавление нового документа, если вдруг не нашелся искомый. В вашем случае можно попробовать на update with aggregation сделать. Полез реализовывать и прям закопался, проще уж вытащить док, изменит ьи полностью новый массив записать
для истории db.getCollection('t_1').updateOne({ product_id: "TEST_PRODUCT" }, [{ $set: { prices: { $cond: { if: { $gt: [{ $reduce: { input: "$prices", initialValue: 0, in: { $add: [ "$$value", { $cond: { if: {$and: [{ $eq: ["$$this.country", "UK"] }, { $eq: ["$$this.currency", "GBP"] } ]}, then: 1, else: 0 } } ]} } }, 0 ] }, then: { $map: { input: "$prices", in: { $setField: { field: "value", input: "$$this", value: { $cond: { if: { $and: [{ $eq: ["$$this.country", "UK"] }, { $eq: ["$$this.currency", "GBP"] } ] }, then: 150, else: "$$this.value" } } } } } }, else: { $concatArrays: [ "$prices", [{ "country": "UK", "currency": "GBP", "value": 150 }] ] } } } } } ]); для дока вида: { "product_id" : "TEST_PRODUCT", "prices" : [ { "country" : "RU", "currency" : "RUB", "value" : 120 },{ "country" : "UK", "currency" : "EUR", "value" : 140 }] }
Tim
апсерт он про добавление нового документа, если вдруг не нашелся искомый. В вашем случае можно попробовать на update with aggregation сделать. Полез реализовывать и прям закопался, проще уж вытащить док, изменит ьи полностью новый массив записать
Спасибо за ответ. Хотелось бы все таки попробовать реализовать через aggregation. У меня очень много данных будет, мне как можно меньшим количеством запросов к БД надо постараться сделать это
Nick
Спасибо за ответ. Хотелось бы все таки попробовать реализовать через aggregation. У меня очень много данных будет, мне как можно меньшим количеством запросов к БД надо постараться сделать это
сложность составления запроса вам не даст никакого профита, а уж про то как легко в нем накасячить или сложность доработать для чего еще я вообще молчу
Tim
если действие не про апдейт а подходит полная замена внутри массива, то чуть проще https://stackoverflow.com/a/75439766
Не, как раз про апдейт, спасибо. Буду думать ещё, может в таком случае сделать легче просто плоскую модель данных. Из минусов то, что будет несколько документов с одним и тем же product_id, но зато операции апсерта будут довольно таки примитивными
Andrew
Привет! Только начинаю разбираться с mongo, не могу понять, как можно сохранять скрипты подобно sql, есть ли какой то аналог sql файла?
Алексей
.js там же не джаваскрипте
Andrew
Спасибо!
Нуриддин
Скорее подтвеодил мои опасения:)
Есть небольшая идея а разве не лучше сделать реплику неспособной голосовать тогда никто не станет мастером а мастер востоновившись зальёт новые данные
Нуриддин
Приложение не может аутентифицировать клиентов в таком случае :(
Почитай документацию, там был вариант при slaveOk функции
Kabulov 🦇
Привет всем, у меня вопрос по поводу mongodb. Мне нужно обновить данные и создать новый столбец. В столбце должен храниться порядковый номер моих данных, то есть перетаскивание должно принимать уникальные числа от 1 до 120.
Kabulov 🦇
Извините за мой язык, я использую переводчик
-
Привет всем, у меня вопрос по поводу mongodb. Мне нужно обновить данные и создать новый столбец. В столбце должен храниться порядковый номер моих данных, то есть перетаскивание должно принимать уникальные числа от 1 до 120.
Здесь описано, как создать индекс, который будет контролировать уникальность. https://www.mongodb.com/docs/manual/core/index-unique/#create-a-unique-index Чтобы добавить ещё 1 поле в документе, необходимо использовать $set в операциях updateOne либо updateMany. В вашем случае сделал бы find с cursor и счётчиком либо получил все документы из коллекции и сделал массив промисов, в котором был updateOne.
-
Может быть есть и лучше способы, но это первое, что пришло в голову
wisp
установил компас на убунту. подскажите, в чем может быть дело, пожалуйста
Nick
установил компас на убунту. подскажите, в чем может быть дело, пожалуйста
компас есть, осталось монгу поставить и запустить
Berik
Всем добрый вечер!Можете ли подсказать?Есть ли подобное pgaudit для mongo?Стоит задача мониторить все выполненые команды в SIEM системе.
Нуриддин
Всем добрый вечер!Можете ли подсказать?Есть ли подобное pgaudit для mongo?Стоит задача мониторить все выполненые команды в SIEM системе.
Я делал дашборды через экспортер, он не выводил метрики со связанными клиентами, скорее общую статистику. Скорее всего такое есть в enterprise версии. Однако через экспортер я спокойно мог наблюдать за количеством выполненых команд и ошибки в процессе их выполнения
Нуриддин
Но тоже в общем количестве
Нуриддин
Незачто
OZOD
привет я хочу удалит дату с дата базы у меня есть масив где есть Id помогите мне создать функцию который будет искать дата с id ии удалят
OZOD
OZOD
вот этот массив тут должен найти с ид и удалять
OZOD
OZOD
так сделал не получилось
Nick
типы должны совпадать, т.е. если в базе ObjectId то надо строки привести к ObjectId
Nick
тут только первый елеммент удаляет
а findByIdAndDelete допускает передачу массива?
Nick
https://mongoosejs.com/docs/api/model.html#Model.findByIdAndDelete() - нет, только один идентификатор значит надо использовать обычное deleteMany с передачей в фильтр $in: []
wisp
Всем привет. Можете, пожалуйста, подсказать, как можно сократить этот запрос или сделать его более производительным? db.find({}, { projection: { "len": 1, "id": 1 } }).sort({ "len": -1 }).limit(10)
Нуриддин
или комплексный по len и id
Нуриддин
Коллеги помогите пожалуйста, у меня просто репликасет из 2х нод но как только я увеличиваю нагрузку то у меня отваливается реплика а мастер становится типо репликой
Нуриддин
2 ноды по 2 ядра и 2 гига оперативной памяти убунту
Нуриддин
Повышение мощности серверов мне не доступны есть ли возможность уменьшить вероятность повторения таких ситуаций
Нуриддин
Возможно из-за того что я oplog ставил слишком большой данные на реплику приходили слишком большие
Алексей
по логам не ясно что там? всю память съедает? все ресурсы?