Serhii
а можно сделать несколько добавлений в базу за один request? то есть в цикле запустить такой процесс: 1. Поиск по id 2. Сверение данных 3. Добавление и так пять раз и после отправить статус 200?
Anonymous
up Есть хоть какие то варианты? если бы были шарды, было бы проще?
Я изучал вариант использования Atlas для размещения уже используемой БД примерно в октябре 2017. Там основная проблема - не дают управлять настройками репликасета. Нет возможности присоединить внешнюю реплику. Без этого плавный переезд не возможен.
Anonymous
За свою практику я провел 4 переезда работающего MongoDB кластера. Использование встроенных решений хостеров (БД как сервис) фактически исключает переезд.
yopp
Привет. Подскажите, можно ли как то с минимальным простоем перенести монгу в новый кластер (с своей железки в атлас). Или только dump/restore?
Добавить новые сервера в существующий кластер и подождать пока закончится initial sync. После этого выставить у старых серверов приоритет в 0, чтоб их нельзя было выбрать, обновить connection string на новые сервера у клиентов, сделать stepdown старого праймари. После чего старые сервера можно вывести из эксплуатации
Игорь
ish@cs41241:~/sket$ numactl --interleave=all mongod 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] MongoDB starting : pid=3332 port=27017 dbpath=/data/db 64-bit host=cs41241 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] db version v3.6.4 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] git version: d0181a711f7e7f39e60b5aeb1dc7097bf6ae5856 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] allocator: tcmalloc 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] modules: none 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] build environment: 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] distmod: debian81 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] distarch: x86_64 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] target_arch: x86_64 2018-04-26T11:17:54.813+0300 I CONTROL [initandlisten] options: {} 2018-04-26T11:17:54.814+0300 I STORAGE [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating 2018-04-26T11:17:54.814+0300 I CONTROL [initandlisten] now exiting 2018-04-26T11:17:54.814+0300 I CONTROL [initandlisten] shutting down with code:100
Игорь
подскажите в чем загвоздка
Anonymous
Саппорт меня игнорировал. Но я обращался за возможностью хостинга только части своих реплик. Т.е. с возможностью "бегства" ;)
Игорь
запуск на дебиан
Игорь
service mongod start работает нормально
Анатолий
service mongod start работает нормально
ты запускаешь не монгод
Игорь
а что?
Artem
Опта. Даже через поддержку?
Вот сейчас пойду им писать. Расскажу потом о результате
Анатолий
если монгод работает, а numactl - нет, ищи проблему в работе numactl
Anonymous
Вот сейчас пойду им писать. Расскажу потом о результате
Будет интересно. Так то сервис новый, может поменяли что...
Игорь
sudo numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf & кому интересно, нужно запустить монго и передать файл конфига
Игорь
и работает
Max
bump @dd_bb буду признателен, если пнёте в нужную сторону
Max
товарищи, может быть ктото сталкивался. есть расшардированая монга. есть шард, на шард идёт миграция. добавил в этот шард +1 сервер в репликасет. он засинкался, все в порядке, но если сделать новый сервер мастером в шарде - балансер перестает работать. монгос резко начинает считать, что коллекция is not sharded. если этому новому серверу сказать stepDown() - все балансер продолжает работать в обычном режиме. что я упустил?
Max
Внешне полностью идентичны, ибо из темплейта
yopp
А в логах что?
yopp
Ещё раз проверьте что монга тот конфиг подтянула
Max
перезапускал несколько раз. новый сервер виден нормально внутри монгоса в sh.status, то есть он осел нормально в configserver-ах. В логах ничего интересного не нашел от слова "совсем", - внешне железка нормально работает, синкается внутри шарда, все как положено попробую дальше поискать.
Anonymous
Подхваченные настройки из конфига можно посмотреть в БД local коллекция startup_log
Anonymous
Вообще, может быть не выставлен параметр "sharding" : { "clusterRole" : "shardsvr" }
Max
выставлено оно , повторю, и в sh.status() видно, и сервер поднят, и синкается и когда он secondary внутри шарда - в него отлично льются данные.
Anonymous
Добрый день! Кто сможет помочь с написанием технического задания и архитектуры для проекта?
Артём
Можно найти документ по ссылке id в документе? { name: 1, link: { _id: "5acd373fc5ccf36b1e5640c6", } }
Артём
найти по link._id
Nick
можно, ищите
Nick
главное првоерьте чтобы тип совпадал
Nick
а то он может быть ObjectId а не стринговый
vitalii
парни, есть масив. как сделать правильно for(let key in array) { find({'name': array[key]. id} ) } как можно по другом сделать
Yurii
const keys = array.map(e => e.id); find({name: {$in: keys} })
Yurii
но тебе придется потом связывание в коде делать, если изменять
vitalii
спасибо большое! а что за связывание, немного не понял
Yurii
спасибо большое! а что за связывание, немного не понял
тебе на отдачу, или изменить и сохранить?
vitalii
просто отдача))
Yurii
просто отдача))
тогда не заморачивайся)
vitalii
спасибо! забыл что так можно сделать, че-то немного уже туплю под вечер))
Артём
У меня в докентре есть массив, в нем будут храниться объекты со ссылкой на документ. likes: [{ owner_id: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, date: { type: Date, required: false } }],
Артём
Хочу в owner_id запихнуть ссылку на User, но в итоге _id получается
Артём
должно получиться вот так likes: [{owner_id: "2", ...}], а сейчас likes: [{_id: "уникальный id", ...}]
Артём
_id: 5ae24a2b5659bc1e653fc287 owner_id: 5acd373fc5ccf36b1e5640c6 date: 2018-04-27 00:52:43.309
Артём
_id всегда будет создаваться?
Nick
_id всегда будет создаваться?
всегда будет, вы лишь можете либо сами его задвать
Артём
Понял, спасибо.
Артём
Делаю запрос и в результате получаю post в котором есть likes: [{a: 1}] Пытаюсь в этих likes найти объект, где a == 1 postLikes.find(like => like.a === 1); Но выдает undefined На обычном массиве всё работает
Maksim
Привет. Мне необходимо сделать агрегацию данных за период, решил использовать mapReduce. Набор данных представляет собой числа описывающих движение графика во времянном промежутке в ту или инную сторону. Подскажите, как найти минимальное значение на промежутке?
Maksim
Nick
https://docs.mongodb.com/manual/reference/operator/aggregation/min/
Maksim
Т.е. минимальное значение от базовой точки(допустим это будет 0) -9.
Maksim
https://docs.mongodb.com/manual/reference/operator/aggregation/min/
Мне нужно не минимальное значение , а минимальное от базовой точки.
Nick
а какая разница?
Nick
фильтром укажите какой диапазон обрабатывать
Maksim
Т.е. если серия данных -100 +300 -200, то минимальное значение от базовой точки это -100
Nick
нет вариантов
Nick
меняйте структуру данных
Nick
или делайте на клиенте
Nick
монга не позвляет хранить состояние в мапредьюсе, а вам это нужно
Maksim
Не очень понял почему -100 минимальное.
По тому что идем от нуля, -100 это значение минус сто, потом вверх на 300 и значение двести, -200 график опять в нуле. Минимальное значение графика на этом промежутке -100
yopp
Ага. Вы дельтами оперируете.
Maksim
Ага. Вы дельтами оперируете.
Все верно. Просто эти дельты нужно будет группировать по различным промежуткам, найти суммы не составляет проблем, а вот именно минимальное значение похоже не засунуть в mapReduce.
yopp
А какой физический смысл этих дельт?
Maksim
А какой физический смысл этих дельт?
Увеличение/Уменьшение баланса пользователя грубо говоря.
yopp
А какую задачу вы хотите решить?
Maksim
Найти минимальное значение суммы дельт на заданном промежутке.
yopp
Но это же будет просто минимальный баланс
Maksim
Но это же будет просто минимальный баланс
Текущий баланс не хранится в документе. Данный баланс обнуляется каждый месяц. Это игра такая, вначале месяца у всех одинаковое количество ресурсов, в конце месяца составляется топ по результатам и обнуляется в некоторое значение.
yopp
Вам проще хранить баланс рядом с дельтой
Stepan
Здравстуйте. Как при $group вернуть поле _id именно как ObjectID и при этом вернуть поле по которому групирую .aggregate([ { $group: { _id: '$type', previewImage: { $push: '$previewImage' }, variables: { $push: '$variables' }, id: { $push: '$_id' }, } }, { $project: { previewImage: 1, type: 1, variables: 1, _id:1 } } ])
Stepan
здесь _id будет то поле по которому группирую, а надо еще и именно _id
Stepan
Я думал перед $group сделать $project, и сделать что-то типа id куда вложить _id