Roman
Vladimir
Всем доброго дня! Не могу найти емкую и актуальную информацию по шардингу, можете поделиться? Цель - есть база большая на репликасет, хочу поднять тестовый стенд с шардинг+репликасет и загнать туда текущие данные для теста. Если по инстансам с данными понятно, то вот с mongos и config еще не вкурил. Прошу палками не бить ^_^ И заранее премного благодарен!
Vladimir
https://habr.com/ru/post/217393/ Вот тут очень хорошая статья
о, а я ее читал, но подумал что устаревшая и может что-то уже не сработать или наоборот появились новые более удобные возможности. В любом случае, начну с неё.
Ярослав
о, а я ее читал, но подумал что устаревшая и может что-то уже не сработать или наоборот появились новые более удобные возможности. В любом случае, начну с неё.
У меня в закладках ещё есть https://habr.com/ru/post/335698/ , я только не помню что там было и насколько хорошо, но что же что-то про горизонтальное масштабирование монги, только вот статья куда-то делась и сейчас недоступна(
Ярослав
Oy) Nice)
Andrey
коллеги, завис в размышлениях: В коллекции документы, в каждом документе есть поле idents - array, внутри массива - также документы(json), как выбрать только те документы у которых значения полей в документах внутри array - равно каком-то значению. И что в выборке были документы в array которых только нужны, а не все, что есть в array
Andrey
да, спасибо, уже почитал через aggregate, unwind и match
Вячеслав
Добрый день , запускаю контейнер с mongo , монтирую папку с базой в var/lib/mongodb , подключаюсь через графического клиента и он не видит базу
Вячеслав
Покажите строку запуска докер. Или компоуз
Ну зайдя в контейнер я вижу эти файлы , я её вижу из самой монги
Вячеслав
Если правильно понимаю то нужно через restore
Andrey
Ну зайдя в контейнер я вижу эти файлы , я её вижу из самой монги
честно, я вас не понимаю. Как вы монтируете, что пишут логи, одна ли и та же версия монги..
Вячеслав
Failed: error scanning filesystem: invalid database name 'diagnostic.data': illegal character '.' found in db name 'diagnostic.data'
Вячеслав
Сейчас выдаёт рестор это
I
Всем привет. Есть две коллекции: //collection Foo {_id: 1, name: "A"} {_id: 2, name: "B"} {_id: 3, name "C"} {_id: 4, name "D"} //collection Bar {_id: 11, foo_ids: [1, 3]} {_id: 22, foo_ids: [1, 2]} Как получить? : //collection Result {foo_id: 1, bar_ids: [11, 22]} {foo_id: 2, bar_ids: [22]} {foo_id: 3, bar_ids: [11]} {foo_id: 4, bar_ids: []}
Андрей
Привет, как очистить из всех записей через uodateMany() поле с массивом? к примеру есть в записи поле dates: [1,2,3], как сделать его []?
Nick
{$pullAll: [0,0]} так?
db.getCollection('array').update( { }, { $push: { arrayField:{ $each: [ ], $slice:0 } } }, { multi: true } )
Андрей
А через updateMany не получится?
Nick
updateMany это врапер над { multi: true }
Nick
так что поулчится
Андрей
Оке) спасибо)
Андрей
так что поулчится
Все ок, но теперь встал вопрос, как брать из бд только те записи, где array.length более 0...
Андрей
collection.find({ field: { $size: 1 } });
Андрей
Но это только для длинны 1
Андрей
а у меня от 1 до 10 к примеру
Андрей
а все записи разом дергать такое себе
Андрей
$size: {$gte: X, $lte: X}
так разве можно?))
Nick
так разве можно?))
а ведь и вправду нельзя))
Андрей
а ведь и вправду нельзя))
"$exists":true мб?
Андрей
"dates":"{$exists":true}
Askhat
Через $expr
Askhat
$lt, $gt
Askhat
$gt: [{$size: ‘$x’}, 0]
Андрей
.find({$expr: {$gte: [{$size: "$dates"}, 0]}});
Андрей
Оно?
Askhat
Да можно так
Андрей
"$dates" у меня поле называется dates
Андрей
через знак доллара пишется?
Андрей
MongoError: The argument to $size must be an array, but was of type: missing
Vladislav
Вячеслав
Добрый вечер писал выше , наверное не совсем корректно сформулировал,извиняюсь , у меня есть сервер , на нем крутится докер с контейнерами , один из контейнеров это монгодб, моя задача хранить базу монго контейнера не в контейнере, а на сервере и при необходимости если этот контейнер удалил, и сделал новый , чтоб он также цеплял базу и тоже хранил не в контейнере , а на сервере
Вячеслав
https://docs.docker.com/storage/volumes/
Рассматривал, но когда стартую контейнер он складывает в data/db , a её смонтировать не даёт и при смене контейнера он не цепляет я как понимаю просто директории , нужно через что то вроде , нет ?
Вячеслав
А поставить на сервер и дать доступ контейнеру нельзя?
Не я выбирал решение, мне только реализация
WolderVsrat
Рассматривал, но когда стартую контейнер он складывает в data/db , a её смонтировать не даёт и при смене контейнера он не цепляет я как понимаю просто директории , нужно через что то вроде , нет ?
Ну через volume и надо, директории как раз вполне спокойно тянутся А каким образом указываете? (Проще показать будет компоуз или строка запуска)
WolderVsrat
Рассматривал, но когда стартую контейнер он складывает в data/db , a её смонтировать не даёт и при смене контейнера он не цепляет я как понимаю просто директории , нужно через что то вроде , нет ?
Просто для примера: docker run -v C:/DCS/db:/data/db ... Запускаю монгу в докере, при запуске говорю ему, что /data/db внутри контейнера это C:/DCS/db на самом хосте - все идеально работает.
I
Всем привет. Вопрос. Почему даже при явном указании сохранить id как String, он сохраняется как ObjectId в модели: @Id var id: String = ObjectId.get().toHexString() В бд: "_id" : ObjectId("608262140551b11f7214c4a4")
I
потому что ObjectId у монги умный и не может быть строкой да и проблема не ясна, это принципиально важно?)
да нужно. т.к ингда осуществляю поиск и приходится использовать ObjectId
I
он определяет по id что это именно ObjectId
Vladislav
I
_id = "6082695e034485552abe065e"
I
сохраняет как ObjectId
I
_id = "a6082695e034485552abe065e"
I
сохраняет как String
I
проблема в том, что у нас бд, и там де факто стандарт ID должен быть как стринг Иногда нужно делать такую вещь {$in: ["$some_id", "$$array_id"]} так не работает, т.к some_id - ObjectId приходится громоздить {$in: [{$toString: "$some_id"}, "$$array_id"]}
Dmitriy
Коллеги, подскажите пожалуйста. Вот есть коллекция заказов. у нее есть e-mail , id продукта и статус Мне нужно вытащить все записи у которых Статус в обработке, но при этом если есть заказ с таким же email и id продукта со статусом оплачен, то не выводить
Dmitriy
Для примера: email1@example.com, 1231, pending email1@example.com, 1231, success тогда мы не трогаем данные записи email2@example.com, 1231, pending email2@example.com, 1231, pending Тогда делаю группировку по email и idпродукта
Dmitriy
То есть, по сути, мне нужно отфильтровать те записи у которых одинаковый емейл и одинаковый id продукта и если у него есть статус success то не выводим
Arams
доброго дня, народ подскажите пожалуйста есть ли способ сохранить дату в монго без таймзоны? мне нужно просто хранить дату типа 02-02-2020 что бы потом делать выборку между двумя датами
Arams
а чем тут таймзона мешает?
Локальную дату сервера берет за основу
Vladislav
Локальную дату сервера берет за основу
передавай таймзону с клиента
Кирилл
Доброе утро скажите плз, в какую сторону гуглить, чтобы решить проблему больших файлов? collection-8-1898404349170122557.wt - 102 гига collection-2-1898404349170122557.wt - 105 гигов цель - делить как то файлы на более маленькие в пределах одного сервера mongo
yopp
А с какой целью вы хотите их делить?
Кирилл
А с какой целью вы хотите их делить?
Быстрый бэкап - восстановление на файловом уровне (можно лить в несколько потоков) Дешевле хранить архивные копии (дедупликация borg)
Viktar
Название коллекции поставлялось в запрос зависимости от параметров
yopp
«расскажи мне про шардинг не говоря что это шардинг» 🤪