Vasiliy
Кто работал с "Change Streams"? Надо повесить "watch" на удаление и при наличии определённого поля в документе - делать работу. Вот только при удалении не отсылается fullDocument, т.к. он уже удалён и я теряю ключевое поле. Можно ли при удалении как-то явно указать данные, которые потом окажутся в change stream или где-то навесить middleware? Кто как поступает в такой ситуации?
Anonymous
не забудь только про xss
спасибо, как-то не подумал
Ilya
Снова возвращаюсь к теме блокировок в транзакциях. Я все еще пытаюсь понять, по какому принципу происходит блокирование. Выяснил вот какую вещь: если я использую функцию updateOne только с оператором $setOnInsert, то блокировка документа не происходит, однако если добавить оператор $set, то блокировка присутствует. То есть по факту документ блокируется только тогда, когда ИЗМЕНЯЕТСЯ. Я почему то раньше думал, что блокируются документы, которые попадают под условия поиска. В связи с этим хотелось бы почитать какие-нибудь статьи, как именно происходит блокировка. В офф документации, к сожалению, подобных разделов не нашел.
Anonymous
Блокировки насколько я знаю настраиваются отдельно в настройках кластера
Ilya
https://docs.mongodb.com/manual/faq/concurrency
Вот кстати эту статью я прочел, но там не совсем та инфа, о которой мне хотелось бы прочитать. Там в основном про shared и exclusive locks. А вот мне интересно, как именно происходит блокировка в монге при совершении транзакции. Пока что знаю, что по стандарту на блокировку отводится 5мс, и в операциях записи документ блокируется только по факту совершения записи (то, что я выше писал). Вот мне бы побольше об этих механизмах интересно узнать)
yopp
Вы с проблемы начните
Ilya
Вы с проблемы начните
У меня нет никакой задачи, я просто экспериментирую из интереса)
Anonymous
кто использовал монго с котлином или джавой?
Yuriy
Всем привет! Кто сталкивался, при выборке по skip, на определенном числе скипа резко поднимается загрузка cpu и выборка вместо 3 секунд выполняется 30 секунд, как поправить?
λ
Подскажите, вот я делаю find({_id: 1}, {subDocs: {$elemMatch: {hidden: false}}}) почему оно возвращает один елемент, а не несколько?
yopp
Подскажите, вот я делаю find({_id: 1}, {subDocs: {$elemMatch: {hidden: false}}}) почему оно возвращает один елемент, а не несколько?
Потому что $elemMatch в проекции возвращает только первый элемент https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/#proj._S_elemMatch
yopp
AF + $filter если необходимо отфильтровать элементы в массиве
yopp
У меня нет никакой задачи, я просто экспериментирую из интереса)
Afair, монга не использует эксклюзивной блокировки на чтение внутри транзакции. Так как там mvcc, то сессия в которой открыта траназкция видит свой «слепок» данных на момент начала транзакции, после того как все операции внутри выполнены и транзакция примеряется, то изменившиеся документы применяются к текущему слепку. И тут может быть две ситуации: изменённые документы не изменились с момента начала транзакции, тогда она будет применена или они изменились, тогда случится write conflict.
yopp
Пусть @victor3 меня поправит
yopp
Т.е. возможности заблокировать отдельный документ, чтоб операции к нему вставали в очередь в монге нет. Если ничего не поменялось, то в монге вообще управляемых пользователем блокировок нет, кроме global lock, для технического обслуживания.
yopp
https://docs.mongodb.com/manual/faq/concurrency/#for-wiredtiger For most read and write operations, WiredTiger uses optimistic concurrency control. WiredTiger uses only intent locks at the global, database and collection levels. When the storage engine detects conflicts between two operations, one will incur a write conflict causing MongoDB to transparently retry that operation.
Alexey
Всем добрый день! Могу я каким-либо образом сохранить длину массива после group до skip и limit? { $group: { _id: '$terminal', events: {$push: {text: '$text', changedAt: '$changedAt'}} } }, { $skip: HandlerService.setSkip(null, req) }, { $limit: HandlerService.setLimit(null, req, 20, 100) }
yopp
помоему должен
Alexey
помоему должен
спасибо, буду смотреть
Anonymous
Ребята, подскажите как реализовать запрос: Есть апишка, которая возвращает 10 самых последних созданных постов. У каждого поста есть время, заданое через объект date: { year: Number, month: Number, hours: Number, minutes: Number } Также есть флаг hidden, который булен. Как правильно построить запрос? Использую mongoose на ноде
Anonymous
Эм, ну насколько я знаю в монге есть тип DateTime, зачем городить свое?..
Slava
Пусть @victor3 меня поправит
@dd_bb @ilyasinizin все так, на read операции внутри транзации блокировок нет. Вот в этом видео в целом хорошо рассказывается о транзакциях https://www.youtube.com/watch?v=g4VttDH4b_s
Anonymous
Эм, ну насколько я знаю в монге есть тип DateTime, зачем городить свое?..
на это есть ряд причин, структура подходит только через объект
Anonymous
Добрый вечер, храню base64 в mongo (ya debil) Как только база становится > 800мб, начинается треш, утилизация диска идёт до 90% и запросы пользователей просто отпадают по контексту Кто какой фикс может посоветовать? Первое что нашел, сделать xfs файловую систему, но вот думаю, поможет ли это?) Из первых попыток, просто бекаплю коллекцию и удаляю ее)
yopp
1) не хранить base64, а использовать тип Binary, это ~30% экономии 2) проверить что все ваши запросы используют индексы и у вас нет collection scan
Anonymous
Документы crud-ю по фильтру, Попробую изменить на Binary, с меня отзыв) За консультацию признателен
yopp
Посмотрите что по всем атрибутам по которым вы фильтруете есть индексы
yopp
4.2.0 (Aug 13) ◦ 4.0.12 (Aug 12) • Плейграунд для запросов • Документация • Официальные курсы по MongoDB Stable: 4.2.0 ◦ Bugfix: 4.0.12 Legacy: 3.6.13 (June 10) ◦ EOL: 3.4.22 (Aug 6, 💀 Jan ‘20) ☠️: 3.2.21 (Dec ’18), 3.0.15 (May ’17)
yopp
https://www.mongodb.com/blog/post/mongodb-42-is-now-ga-ready-for-your-production-apps
yopp
🥳
Max
Привет! на атласе есть Snapshots - Continuos Backup, - подскажите пожалуйста - можно ли там "зафризить" какой-то из бекапов чтобы он не исчез со временем? у меня в голове одна идея - выгрузить его в соседнюю базу данных
senpos
Посоветуйте, пожалуйста, бесплатный клиент для Монго на Windows, кроме Robo3T :) Если существует с визуальным билдером - будет вообще отлично.
Kinderwond
модель в mongoose это название коллекции?
KisaPS
Какой способ обмена данными reacta с mongo на сегодня, считается наилучшим?
Slava
Какой способ обмена данными reacta с mongo на сегодня, считается наилучшим?
Через бэкенд, например на nodejs, если я правильно понял вопрос
Kinderwond
Как решить проблему на хостинге? На локалке запускал дополнительно mongod.exe -dbpath {путь к БД}
Kinderwond
UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
AstraSerg
У вас сервер не запустился. Смотрите что в логах
M
Привет может есть у кого опыт добавления шарды в уже существующую базу с 1 шардой? Продакшн, нагрузка хотелось бы знать как на практике работает балансировщик
Vlad🍁
Vlad🍁
Всем привет, возник вопрос. Почему не проходит авторизация? В конфиге авторизация включена, все айпи забиндены
AstraSerg
У вас пользователь создан в базе koko?
Vlad🍁
У вас пользователь создан в базе koko?
Да, я в него и зашел на 2 скрине
Vlad🍁
И авторизация через скрипт на JS тоже не проходит
Vlad🍁
Есть вообще нормальный гайд по авторизации?
AstraSerg
Есть вообще нормальный гайд по авторизации?
да, конечно, монга славится нормальными гайдами, только это у васн е авторизация, а аутентификация. Вот здесь все ссылки: https://docs.mongodb.com/manual/security/
Artyom
Иначе иовейтами все засыпит
AstraSerg
Черт, окей, спасибо, дома еще раз перечитаю
по сути вам нужны вот эти 4 статьи: https://docs.mongodb.com/manual/core/authentication/ https://docs.mongodb.com/manual/core/authorization/ https://docs.mongodb.com/manual/tutorial/enable-authentication/ https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/
Vlad🍁
Как правильно биндить несколько айпи в конфиге монго? На стэке писали разные варианты (через запятую, как массив, строкой и т.д.) и все выбивали ошибку при рестарте монго
Артем
Помогите с проблемой добавления новых элементов в существующую реплику, пожалуйста. Следую инструкции https://docs.mongodb.com/manual/tutorial/expand-replica-set/index.html . Там есть шаг добавления нового узла: rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } ) В моем случае это выдает ошибку с сообщением "errmsg" : "Either all host names in a replica set configuration must be localhost references, or none must be; found 1 out of 2", "code" : 103, "codeName" : "NewReplicaSetConfigurationIncompatible", Разве я не могу добавить вторичный узел с другим ip (не localhost)? Или же все узлы нужно поднимать с некоторой третьей машины, чтобы localhost нигде не фигурировал?
Артем
Да, я выключил базу и запустил так mongod --dbpath data/db --replSet foxy --auth --bind_ip "192.168.1.2" Но в этом случае когда я захожу через mongo --host "192.168.1.2" у меня нет PRIMARY узла. Все действия выполняются от лица foxy:OTHER>
Артем
rs.initiate() выдает "errmsg" : "already initialized"
Артем
Добавил арбитра, теперь такое сообщение Either all host names in a replica set configuration must be localhost references, or none must be; found 2 out of 3 Почему то не выходит запустить PRIMARY, обращаясь к нему через его ip, а не как localhost. Он запускается как OTHER
AstraSerg
нужно исправить ошибку из вообщения. В ней говорится, что либо все 3 долждны быть локалхостми, либо ни один из 3.
Omer
всем привет!
Omer
подскажите хочу почистить файлики из коллекции binary.files таким образом, чтобы и чанки принадлежащие удаляемым файлам были удалены тоже просто db.collection.remove() не поможет здесь, как я наивно полагал ранее как сделать это правильно, чтобы в двух коллекциях почистились файлы заранее спасибо!
Omer
да, да терпение - добродетель)
Vlad🍁
Считается нормой ставить в net.bindIp 0.0.0.0 для всех IP? Или есть какой-то более нормальный метод, чтобы прикрепить пару айпи и не более?
Vlad🍁
[ip1,ip2,ip3]
Монго не стартует так
Pafa
А что пишет и какая версия?
Vlad🍁
А что пишет и какая версия?
Что пишет не помню, скину вечером. Версия 4.2.0
yopp
Считается нормой ставить в net.bindIp 0.0.0.0 для всех IP? Или есть какой-то более нормальный метод, чтобы прикрепить пару айпи и не более?
Да, вам в любом случае потом стоит добавить белый список адресов с которых могут ходить в монгу в ваш файрволл
yopp
А там можете и правила добавить, по каким адресам разрешать соединения.
yopp
На мой взгляд заморачиваться с конкретными адресами в bind стоит только тогда, когда вы хотите на этом-же порту на том-же хосте запустить ещё одно приложение которое слушает на другом адресе
Vlad🍁
Понял, спасибо
Valentyn
Valentyn
Ну при наличии хороших героев в атаке и удачного поля выносится любая оборона, кто ж спорит 😉