Aram
а что мешает прост игнорировать ошибку?
Игнорировать любые ошибки или только с дублирующим ключом?
Nick
Игнорировать любые ошибки или только с дублирующим ключом?
ну вам мешает ошибка при дублировании - значит ее и игнорировать
Alexandrr
разрешите общий вопрос - на счёт логов монги как вы их используете? для чего? с помощью чего с ними работаете? у кого какие практики с ними?
Александр
Здравствуйте, есть ли гарантии на то, что во время исполнения запроса все join и подзапросы внутри него увидят одно состояние базы?
Александр
https://www.mongodb.com/docs/manual/faq/concurrency/
А правда, что один селект по дефолту происходит не в транзакции?
Ivan
Привет. есть такое поле в схеме ... participants: { type: Object, of: { id: { user: { type: Schema.Types.ObjectId, ref: 'user', }, entryTime: Date, exitTime: Date, browser: Object, _id: false, }, }, default: {}, }, ... мне нужно получать данные user-ов в развернутом виде, но такая запись не работает (понятно, почему) .populate({ path: 'participants', populate: { path: 'user', model: 'user' } }) не понимаю и не могу найти, как мне можно сделать это внутри объекта. подскажите, пожалуйста
Ivan
я знаю, что можно с помощью arrayFilters указывать переменную в пути, которой является ключ здесь, но в данном случае с ней не сделать, наверное
Maxmudjon
работает!
Maxmudjon
Ivan
of - это не поле. Как я понял, так в схеме обозначается связь ключ - значение participants = { 'id_1': { user: ... , }, 'id_2': { user: ... , }, }
Ivan
тоже не работает :(
Ivan
нет, ни разу не пользовался
Ivan
в том и дело, что в массивах такие действия не вызывают никаких сложностей, а вот во вложенных объектах - вообще никак
Ivan
так у меня объекты в объектах. ну и в любом случае lean не использую. вся проблема в ключе, видимо. я знаю только как точечно обратиться к конкретному ключу, а чтобы в общем - хз. и что-то даже похожего случая не могу найти. может действительно только $lookup поможет, но я не пробовал так еще
Константин
всем привет )) подскажите что не правильно делаю при агрегации const todoCollections = await Todo.aggregate([ { $lookup: { from: 'users', localField: 'user_id', foreignField: '_id', as: 'user' } }, { $match: { user_id: mongoose.Types.ObjectId(id), completed: false } }, { $sort: { updatedAt: 1 } }, { $skip: offset }, { $limit: limitQ } ]); если completed == false, то все нормально отбирается, если true, то возвращается 0, хотя с состоянием true в коллекции есть записи кроме того в Compass проверяю эту конструкцию и все работает с true / false нормально
Константин
Константин
Что такое "нормально"? И делайте лукапы после всех фильтраций и скип лимитов, т.к вы не работаете с подтянутым содержимым
нормально == ожидаемое поведение, т.е. отбор с completed==false при true возвращается всегда пустой массив по lookup не понял если честно, т.е. на каждый фильтр делать отдельную секцию lookup ?
Nick
нормально == ожидаемое поведение, т.е. отбор с completed==false при true возвращается всегда пустой массив по lookup не понял если честно, т.е. на каждый фильтр делать отдельную секцию lookup ?
уберите все лишнее и оставьте только match секцию, чтото будет в результате? если да, то сверху добавьте сортирвоку и скип+лимит, тут наверянка уже данных не будет изза скипа
Nick
нормально == ожидаемое поведение, т.е. отбор с completed==false при true возвращается всегда пустой массив по lookup не понял если честно, т.е. на каждый фильтр делать отдельную секцию lookup ?
а про лукап - очень дорогая операция и ставить ее первой до фильтрации, чтобы по абслютно всем записям в коллекции она выполнилась думаю вам не требуется
Lucky SB
Добрый вечер. Пришлось тут поставить mongodb В кластер куба. Ставил чартом от bitnami По требованию программистов версия старая - 4.2.21 в чарте от битнами риднесс и ливнесс пробы делаются через запуск mongosh и таймаута в 5 секунд не хватает на проверку!!! если тыкать руками, то с момента запуска `mongosh`до появления консоли проходит достаточно много времени. иногда и больше 5 секунд. в общем то место где искать понятно. А можете посоветовать как-бы расширенные логи получить с монги и mongosh, чтобы понять в каком месте оно так безбожно тормозит. и там везде ipv6 only
Maksim
Добрый вечер. Подскажите, есть ли готовые "фреймворки" или "админки" для MEAN стэка? Делаю свой сайт, и как-то не хочется делать с нуля панель для управления контентом
Евгений
Всем привет, как получить через find значения полей которые не null, то есть чтоб null не было
Sergey spbsite
Try $pull to remove element from array, and updateMany() not require multi: true option, .updateMany( { meta: null }, { $pull: { meta: null } } )
Sergey spbsite
https://www.tutorialspoint.com/remove-null-element-from-mongodb-array
Lucky SB
he MongoDB Shell, mongosh, is a fully functional JavaScript and Node.js мда. бинарник в 160 мегабайть. жаба и ноджс в одном флаконе. в общем внутри контейнера mongosh --help запускается 3-4 секунды.... Поменяю на запуск через старый шелл mongo
Valeriya
всем привет! у меня есть mongodb replica set состоящий из 3 нод ( master > slave > slave ), когда выключаю два слейва ( service mongod stop ) мой оставшийся мастер через 15 секунд превращается в secondary, почему так происходит?
vital
Всем привет а подскажите есть ли команда которая переведет 1 из нескольких shard в состояние только для чтения? чтобы дальше распределение chunks было только на другие шарды?
Тим
Подскажите какой тип нужен для цены с плавающей точкой
Alexandrr
Подскажите какой тип нужен для цены с плавающей точкой
decimal либо инты "с копейками", но тогда прописывай в доке это
Alexandrr
спасибо
инты "с копейками" - это когда у тебя 10 руб 79 коп отображается в виде 1079, валюта руб просто 10 руб - отображается как 1000 руб ну и не забывать об этом ни тебе, ни фронту
Roman
Подскажите почему $lookup выдает [[ Object ]] вместо объединения двух коллекций. В одной коллекции _id документов в массиве. В другой коллекции просто документы с ключом в виде _id. Обьединяю в $lookup по этим id.
Roman
$lookup должен объединять по множеству документов разве нет?
Sergey
парни такой вопрос. я тут на низком старте, собираюсь шардироваться... и собсьвенно вопрос, как мне обеспечить HA коннект к mongoS'ам? можно ли их перечислить в коннекшен урле spring'а (вроде нет)? Городить HAproxy перед монгосами?
Ayrat
всем привет, а почему sign in на сайте Монги не работает??!
Ayrat
и signup не заходит
Ayrat
с компа и ноута, через разные провайдеры
Ayrat
Sergey
плохой у вас vpn
Ayrat
плохой у вас vpn
а какой у вас?
Sergey
а какой у вас?
самодельный) в oracle cloud
Sergey
а с mongoS'ом то ктонибудь поможет?
Константин
а с mongoS'ом то ктонибудь поможет?
он сбежал и нужно найти ?
Константин
воть
можно ручками или в docker: FROM mongo:5 # Make MongoDB a replica set to support transactions. Based on https://stackoverflow.com/a/68621185/1952977 RUN apt-get update && apt-get install patch # How to create scripts/docker-entrypoint.sh.patch # 1. Download the original file: # wget https://github.com/docker-library/mongo/raw/master/5.0/docker-entrypoint.sh # ( wget https://github.com/docker-library/mongo/raw/b5c0cd58cb5626fee4d963ce05ba4d9026deb265/5.0/docker-entrypoint.sh ) # 2. Make a copy of it: # cp docker-entrypoint.sh docker-entrypoint-patched.sh # 3. Add required modifications to docker-entrypoint-patched.sh # 4. Create patch: # diff -u docker-entrypoint.sh docker-entrypoint-patched.sh > scripts/docker-entrypoint.sh.patch # 5. Clean up: # rm docker-entrypoint.sh docker-entrypoint-patched.sh COPY scripts/docker-entrypoint.sh.patch . RUN patch /usr/local/bin/docker-entrypoint.sh docker-entrypoint.sh.patch ENTRYPOINT ["docker-entrypoint.sh"]
Константин
а это сам patch --- ./docker/mongodb/docker-entrypoint.sh 2022-11-23 11:21:07.329753300 +0700 +++ ./docker/mongodb/docker-entrypoint-patched.sh 2022-11-23 12:24:15.039206200 +0700 @@ -299,6 +299,10 @@ fi if [ -n "$shouldPerformInitdb" ]; then + + openssl rand -base64 756 > /etc/mongo-key/mongodb.key + chmod 400 /etc/mongo-key/mongodb.key + mongodHackedArgs=( "$@" ) if _parse_config "$@"; then _mongod_hack_ensure_arg_val --config "$tempConfigFile" "${mongodHackedArgs[@]}" @@ -419,7 +423,14 @@ set -- "$@" --bind_ip_all fi - unset "${!MONGO_INITDB_@}" + echo 'Initiating replica set' + "$@" --logpath "/proc/$$/fd/1" --fork + echo 'rs.initiate({"_id":"rs","members":[{"_id":0,"host":"m0:27017"},{"_id":1,"host":"m1:27017"},{"_id":2,"host":"m2:27017"}]});' | mongosh -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD" + "$@" --logpath "/proc/$$/fd/1" --shutdown + echo 'Done initiating replica set' + + unset "${!MONGO_INITDB_@}" + fi rm -f "$jsonConfigFile" "$tempConfigFile" можешь свой написать, в зависимости сколько реплик / шардов
Константин
шарды прописываются в этой строке echo 'rs.initiate({"_id":"rs","members":[{"_id":0,"host":"m0:27017"},{"_id":1,"host":"m1:27017"},{"_id":2,"host":"m2:27017"}]});' | mongosh -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD" в данном случае 2 slave - m1 & m2
Константин
как поднять шарды я понимаю, а как скормить приложению на спринге кучу монгосов и чтобы это было HA... чтобы я мог останавливать часть монгосов когда надо
если я правильно тебя понял, то создаешь например два коннекта, один на master в него пишешь, а второй на slave из него читаешь, это при горизонтальном шардировании, вертикальное не использовал т.е. в коде всегда выбираешь какой коннект используешь, в целом это не только NoSQL (например MongoDB) касается, это так же относится и к классическим SQL БД
Nick
воть
думаю тут стоит сходить на гитхаб с создать ишью в спринг монге, как ни странно нигде нет упоминаний о подобном
Nick
воть
из примеров подключения к шард кластеру https://www.mongodb.com/docs/manual/reference/connection-string/#examples просто указываем списком mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017 а дальше вопрос в поддержке в спринге и возможно в джава драйвере
GagoChad
Здравствуйте, я подключился к mongodb через кластер, раньше он функционировал, но сейчас он приостановлен. как мне возобновить деятельность кластера?
C
Может кто подсказать, как мне пройтись по этому массиву и убрать все невалидные объекты, в которых id привязан к удаленному юзеру?(уже не существует записи)
Nick
Здравствуйте, я подключился к mongodb через кластер, раньше он функционировал, но сейчас он приостановлен. как мне возобновить деятельность кластера?
как как либо он еще не создался либо остановлен по какимто причинам, провалитесь в него и там наверняка чтото написано. А так в любых случаях пишите в техподдержку атласа
GagoChad
как как либо он еще не создался либо остановлен по какимто причинам, провалитесь в него и там наверняка чтото написано. А так в любых случаях пишите в техподдержку атласа
у меня такая хронология была: 1. создал кластер, всё работало 2. кластер был остановлен пару дней назад (не понятно, почему) 3. кластер возобновил деятельность (тоже непонятно, что я сделал для этого) 4. кластер вновь остановлен я думаю, можно создавать каждый раз кластер, но это такая себе затея