yopp
Как я понимаю, это баланс сеть или (оперативка + cpu) И раз это дает такой эффект на сеть для меня, то в угоду перформанса, можно покрутить этот баланс в сторону оперативки. Теперь хотя бы понятно куда в случае чего копать, Это обычно имеет эффект при большом числе очень маленьких документов Вот именно это мой случай. Но впредь буду смотреть на сетевое соединение, прежде чем ругать базу)
Кстати, размер любого ответа в сетевом протоколе монги ограничен размером bson документа — 16мб. Ну и даже по вашим измерениям видно что после 30к время перестало существенно изменятся и скорее всего разброс это проблемы с пропускной способностью. в целом, лучше использовать hping или tcpping чтоб померять реальные задержки hping можно вот так hping -I <имя внешнего интерфейса> -p 27017 mogno.cluster.host
Антон
как можно задать таймаут для сессии? т.е. если нет запросов n времени, то рвем сессию. нашел параметр maxIdleTimeMS, но ругается Error: maxIdleTimeMS not supported
Антон
есть nodejs скрипт, который с какой то периодичностью не рвет соединение с базой. хочу временно это решить заданием таймаута в настройке коннекта с базой
yopp
https://docs.mongodb.com/manual/reference/connection-string/#connection-pool-options
yopp
скорее всего вы ищите maxIdleTimeMS
yopp
но нет никакого особого смысла закрывать соединения
Антон
скорее всего вы ищите maxIdleTimeMS
ругается Error: maxIdleTimeMS not supported
Anonymous
Всем привет. Я совсем зеленый в Mongo. Смотрю доку по установке MongoDb в ubuntu. Вот здесь есть рекомендация - https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/#create-a-list-file-for-mongodb создать файл mongodb-org-4.4.list, руками? И ещё, скажите пожалуйста, как вообще происходит процесс обновления версии Mongo? Почему имя файла жестко привязано к версии? Где об этом прочесть (если долго самому излагать) Спасибо.
Vened
Это добавление в операционную систему репозитория, из которого будет ставиться новая версия. >создать файл mongodb-org-4.4.list, руками? читайте внимательнее. там ведь даже консольная команда приводится, которой его можно создать - просто скопируйте и выполните
Denis
А как можно написать запрос типа такого? На ум приходит только такое решение, нужно для нескольких полей сохранять флаги о наличии этого поля, хотел как то сделать одним запросом чтобы избежать гонок db.coll.updateOne({ some: ‘one’ }, { $set: { email: ‘abc’ hasEmail: { // after update, true/false $email: { $ne: null } } } })
можно через aggregation update атомарно ставить второе поле в зависимости от конечного значения первого, не помогают мне тут последнее время (( второй вариант более тупой - через транзакцию, минус в том что читать бы в транзакции пришлось с primary
Denis
рекомендуется если возможно располагать поля в индексе в порядке Equality Sort Range, а $in с точки зрения монги это Range или Equality? $nin все таки Range как я понимаю
Denis
$in это $or
а $or Range?)) Просто Range в моем понимании $gt и тд, тут явно рейндж скан а $or вроде и не Equality совсем, а какой то multi equality
yopp
Не понимаю что вы имеете ввиду под этими терминами
Denis
Не понимаю что вы имеете ввиду под этими терминами
абзац follow the ESR rule https://www.mongodb.com/blog/post/performance-best-practices-indexing https://www.alexbevi.com/blog/2020/05/16/optimizing-mongodb-compound-indexes-the-equality-sort-range-esr-rule/
yopp
А, окей, это по query boundaries. $or это логическая операция, это не операция сравнения. $in / $nin проще рассматривать как синтаксический сахар над $or: [ {a: 1}, {$or: [{a: 2}]} ]
yopp
Сам по себе $or не определяет query boundary, так как у вас там действительно внутри может быть gt(e)/lt(e)
yopp
Я сходу не помню как в итоге boundary для $in выглдяит, можете в explain посмотреть
Denis
спасибо )
Viktar
Я сходу не помню как в итоге boundary для $in выглдяит, можете в explain посмотреть
я видел как равенства и как больше меньше... подозреваю, что зависит от индексов
yopp
от запроса и настроения планировщика
Viktar
)) кстати монга собирает статистику по коллекциям?
yopp
Какого рода?
Viktar
Сколько записей. Какие. Это позволяет оптимизатору выбирать план запроса. Так работает в Sql server
Александр
читая https://www.mongodb.com/blog/post/performance-best-practices-indexing эту статью, наткнулся на следующее: Regular indexes are useful for matching the entire value of a field. If you only want to match on a specific word in a field with a lot of text, then use a text index. If you are running MongoDB in the Atlas service, consider using Atlas Full Text Search which provides a fully-managed Lucene index integrated with the MongoDB database. FTS provides higher performance and greater flexibility to filter, rank, and sort through your database to quickly surface the most relevant results to your users.
Александр
я правильно понимаю что если я хочу нормальный FTS, то self-hosted монга не подойдёт?
Joe
я правильно понимаю что если я хочу нормальный FTS, то self-hosted монга не подойдёт?
Пойдет. Только в алтасе этот индекс с некой технологией Lucense работает
Александр
Пойдет. Только в алтасе этот индекс с некой технологией Lucense работает
Да я понял что речь об Apache Lucene, я не понял почему разные виды индексов используются
Александр
видимо чтобы заинтересовать в Атласе)
такое себе) Возможно придётся эластик сбоку ставить теперь)
Viktar
такое себе) Возможно придётся эластик сбоку ставить теперь)
У меня такое решение с эластиком, очень хорошо себя зарекомендовало
Али
Привет ребят, помогите плс. Как обновить поле внутри объекта в записи? Я использую $set, оно перезаписывает поле.
Влад
$set: { 'account.balance': 5 }
Али
Спасибо большое
Roman
Подскажите такой вопрос, в колекции есть поле типа массив, [{customerId: 1, position: '111'}, {customerId: 2, position: '222'}]. Мне нужно изменить ключ position для customerId == 1. Возможно ли это сделать?
Влад
https://docs.mongodb.com/manual/reference/operator/update/positional/#up._S_
Artem
Как обновить структуру базы, если в ней уже есть документы?
✙ Nikita
Как обновить структуру базы, если в ней уже есть документы?
зависит от того как надо обновить? добавить поле? удалить? переименовать?
✙ Nikita
изменить тип поля
хз насколько это по феншую, но я обычно пишу в отедльную папку migrations скрипт который выполняю потом в mongo шелле, к примеру: db.users.forEach(user => { user.neeeded_field = parseInt(user.neeeded_field); db.users.save(user); });
Artem
мне нужно Number заменить на [Number]
✙ Nikita
Валидация выполняется на стороне ORM
Artem
а. т.е. я могу изменять документы без валидации?
✙ Nikita
да, ведь если ты сделаешь запрос к бд напрямую - никакая орм валидацию не сделает
✙ Nikita
у тебя база в продакшене какая-то?
✙ Nikita
т.е. активно используется в данный момент?
Artem
могу выключить прогу вообще
Artem
проблема ток с валидацией
✙ Nikita
тогда можешь выполнить нужный запрос для миграции в самой бд, а потом в исходниках приложения в схеме модели меняешь тип данных
Artem
не подумал прош монгошелл чет
✙ Nikita
и все
Artem
спасибо
Artem
спасибо
Влад
тогда можешь выполнить нужный запрос для миграции в самой бд, а потом в исходниках приложения в схеме модели меняешь тип данных
Я использую драйвер mongodb для nodejs, пишу схемы валидации и применяю их к коллекциям при коннекте к базе. Потом я запускаю миграцию модулем migrate-mongo (отдельній процесс получается, новое подключение, и никаких схем там нет), но получаю ошибки при добавлении документов не соотв. формату. Используется атлас, и я как раз таки думал, что на уровне СУБД все валидации сохраняются и применяются при вставке/обновлении. Разве не так? Может у мангуста это на уровне орм, хз
✙ Nikita
"но получаю ошибки при добавлении документов не соотв. формату. " можно конкретнее какую ошибку? монга не делает никаких валидаций, монгус для того и был по идеи сделан чтобы кроме четкой схемы была еще валидация
✙ Nikita
либо я что то не понимаю в этой "теории" монги
DM✴︎
Добрый день. Кто-нибудь сталкивался с WARNING: the collection 'collection' lacks a unique index on _id? Даст монго пересоздать этот индекс?
✙ Nikita
не знал что они с 3.2 добавили валидацию
Влад
"но получаю ошибки при добавлении документов не соотв. формату. " можно конкретнее какую ошибку? монга не делает никаких валидаций, монгус для того и был по идеи сделан чтобы кроме четкой схемы была еще валидация
драйвер тоже с этим справляется, вопрос, откуда он тогда берет схемы, когда миграция протекает в соседнем процессе с отдельным подключением, когда их импорта там нет? Они должны быть сохранены либо в СУБД либо атлас делает что-то подобное
✙ Nikita
тогда отбой
✙ Nikita
https://www.mongodb.com/blog/post/document-validation-part-1-adding-just-the-right-amount-of-control-over-your-documents
✙ Nikita
какие то странные команды db.runCommand({ collMod: "contacts", validator: {$or: [{version: {"$exists": false}}, {version: 1, $and: [{Name: {"$exists": true}}] }, {version: 2, $and: [{Name: {"$exists": true, "$type": 2}}] } ] } })
Влад
вечерком почитаю) но на интуитивном уровне все ясно
Влад
нет, нативный драйвер
Влад
return db.command({ collMod: key, validator: { $jsonSchema: fastify.Schema.Collection[key], }, });
Влад
я такие же финты ушами делаю)
✙ Nikita
ну короче тогда получается что тебе нужно изменять перед миграцией еще и сами валидаторы в бд