Ivan
+ $set создаст документ, если не найдёт
там для этого параметр есть
Max
значит не правильно используешь
{ $set: updatingData } - что тут может быть неправильного)
Ivan
перезаписывает документ, я пробовал)
попробуй set для 1 поля уверен норм обновит
Max
попробуй set для 1 поля уверен норм обновит
{ $set: { index_page_meta: updatingData.index_page_meta } } удаляет поля, которых нет в обновлении)
Max
Да)
Возможно, причина в том, что у меня есть вложенные объекты, но это же дикость, если такой инструмент не учитывает вложенные данные по модели)
Max
сейчас проверю)
не, походу нужно весь документ отправлять на бэк или перед обновлением доставать его из базы, мержить с новыми данными и обновлять полностью, иначе перезаписывает
Nick
что вы там намудрили. Сделайте просто обычный апдейт без findOne
Nick
не понял)
просто обычный updateOne выполните с тем же $set
Max
просто обычный updateOne выполните с тем же $set
сейчас попробую, но по логике, findOneAndUpdate - это подмножество updateOne, если нет, то всё ещё запутаннее становится)
Max
просто обычный updateOne выполните с тем же $set
как и предполагал, у них логика схожа) тоже перезаписывает)
Ivan
найди пример в интернете и потести
Max
ток у тебя перезаписывает)
значит у меня особенная база и монгус)
Ivan
в нем поиграйся
Max
найди пример в интернете и потести
да, я же впервые с монгой работаю, вот не додумался протестить разные варианты и сразу в сообщество пришёл спрашивать)
Max
в нем поиграйся
можно ещё яйца покатать, как вариант)
Max
ладно, если никто не сталкивался с подобным поведением, значит только я)
Max
буду весь документ скармливать, раз у нас такие умные инструменты)
Nick
как и предполагал, у них логика схожа) тоже перезаписывает)
как выше сказали нужно попробовать без монгуса. Либо в том же компасе либо ручками апдейт написать и через mongosh выполнить
Max
раньше не понимал, почему коллеги шарахаются от монги, и спокойно себя чувствуют в постгрёй)
Max
как выше сказали нужно попробовать без монгуса. Либо в том же компасе либо ручками апдейт написать и через mongosh выполнить
это не имеет большого смысла, т.к.дампую док перед сохранением, если такая особенность в монге, то что поделать) с плоским документом проблем нет, а вот со сложной структурой уже есть, как показывает практика)
Max
найди пример в интернете и потести
попробуй сделать модель с вложенными полями, у которых значение объект и обновить только одно вложенное поле, увидишь, с чем я столкнулся)
Max
вам посоветовали что сделать. ошибка явно у вас
https://playground.mongoosejs.io/#YXdhaXQgbW9uZ29vc2UuY29ubmVjdCgnbW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNy9tb25nb29zZV90ZXN0Jyk7CmNvbnN0IHNjaGVtYSA9IG5ldyBtb25nb29zZS5TY2hlbWEoeyBuYW1lOiBTdHJpbmcsIGFkZHJlc3M6IHsgcGh5c2ljYWw6IFN0cmluZywgZmFrZTogU3RyaW5nIH19LCB7IHZlcnNpb25LZXk6IGZhbHNlIH0pOwpjb25zdCBUZXN0TW9kZWwgPSBtb25nb29zZS5tb2RlbCgnVGVzdCcsIHNjaGVtYSk7Cgpjb25zdCBkb2MgPSBuZXcgVGVzdE1vZGVsKHsgbmFtZTogJ0FsZXgnLCBhZGRyZXNzOiB7IHBoeXNpY2FsOiAiUGh5c2ljYWwiLCBmYWtlOiAiZmFrZSIgfSB9KTsKYXdhaXQgZG9jLnNhdmUoKTsKCmNvbnN0IGRvY3MxID0gYXdhaXQgVGVzdE1vZGVsLmZpbmQoe30pOwpjb25zb2xlLmxvZygnUmVzdWx0IHNhdmU6JywgZG9jczEpOwpjb25zb2xlLmxvZygnKicucmVwZWF0KDUwKSk7Cgpjb25zdCBuZXdEYXRhID0geyBhZGRyZXNzOiB7IGZha2U6ICJOZXcgZmFrZSIgfSB9Cgpjb25zdCB1cGRhdGVkUmVzdWx0ID0gYXdhaXQgVGVzdE1vZGVsLmZpbmRPbmVBbmRVcGRhdGUoeyBuYW1lOiAiQWxleCIgfSx7ICRzZXQ6IG5ld0RhdGEgfSwgeyBuZXc6IHRydWUgfSk7Ci8vLSBjb25zdCB1cGRhdGVkUmVzdWx0ID0gYXdhaXQgVGVzdE1vZGVsLnVwZGF0ZU9uZSh7IG5hbWU6ICJBbGV4IiB9LHsgJHNldDogbmV3RGF0YSB9LCB7IG5ldzogdHJ1ZSB9KTsKY29uc29sZS5sb2coJ1Jlc3VsdCB1cGRhdGU6JywgdXBkYXRlZFJlc3VsdCk7Cgpjb25zb2xlLmxvZygnKicucmVwZWF0KDUwKSk7Cgpjb25zdCBkb2NzMiA9IGF3YWl0IFRlc3RNb2RlbC5maW5kKHt9KTsKY29uc29sZS5sb2coJ0ZpbmQgYWZ0ZXIgdXBkYXRlOicsIGRvY3MyKTs=
Ivan
set 'address.fake' ты сам перезаписываешь объект
Max
Я и о том, что не умеет монга обновлять целевые поля, в лоб перезаписывает объект)
Max
Я и о том, что не умеет монга обновлять целевые поля, в лоб перезаписывает объект)
искал способ, чтобы не мержить объекты до обновления, думал монга умеет это делать внутри, если что-то там в options указать, но нет, не умеет, видимо)
Max
всё равно, спасибо, что ответили)
Vladimir
удаляет поля, которые не обновляю
Поля полным ключом передавай, аля 'payload.someObj.someField1': 123 в этом случае задаст значение конкретного поля и не тронет остальные
A
Приходило кому нибудь такое ? Мне на 2 акка пришло
Andrey
Приходило кому нибудь такое ? Мне на 2 акка пришло
https://twitter.com/vxunderground/status/1736134217321370109
Валерий
Здравствуйте! Такая вот ситуация выходит, что скачать MongoDB и Compass у меня получилось, только теперь я не понимаю, как подключить этот самый compass к учётной записи MongoDB, тк при попытке войти как-либо в неё с сайта мне сбрасывают соединение. Можно ли в такой ситуации попробовать использовать VPN? Если да, то как это правильно сделать, а если нет, то какие способы вообще есть, чтобы использовать MongoDB без VPN?
Александр
А зачем
Ящик водки
я пишу свои "велосипеды" и стараюсь избегать скип.
поздравляю тогда я привык писать код наиболее качественно, велосипеды оставляю новичкам
Andrey
поздравляю тогда я привык писать код наиболее качественно, велосипеды оставляю новичкам
Аналогично, безусловно примитивный skip limit из hello world pymongo - вершина качества кода.
Рахим
Всем привет, ребят нужна хелпа, человек на сервере установил монгу и на ней 2 проекта работают в проде, я 3 проект хочу запустить, но вот человек ушел с проектов и не отвечает, пароль не знаю, что можно сделать ? Как я могу узнать пароль ? П.с. я вообще 0 в монге если че не кидайтесь тапками
Рахим
все команды из гугла требуют пароль
Рахим
узнать пароль - никак, сбросить - https://stackoverflow.com/questions/49865066/how-to-reset-root-password-in-mongodb
балин, сбросить то я понял, просто проекты написаны не мной, и мне придется в 2 проекта в код лезть чтоб у них тоже сменить, это вообще заеба
Tetra
главное убедитесь что монга не торчит в дикий интернет, когда будете запускать ее с отключенной авторизацией
Рахим
Ладно, спасибо за помощь большое
Рахим
увы других вариантов нет
Какое имя пользователя то дефолтное рута ?
Nor
Подскажите, при удалении / добавлении индекса блокируются таблицы? В монгу активно читается-пишется 1-2к rps + репликация.
Nor
Учитывая что добавлять нужно в индекс конкретное поле первичного ключа.
Nick
Подскажите, при удалении / добавлении индекса блокируются таблицы? В монгу активно читается-пишется 1-2к rps + репликация.
коллекции не блокируются на время создания индекса, только в начале и в конце для синхронизации состояния. Как правило это незначительное время. Точно спрогнозировать замедление не получится, т.к. много от чего зависит. Общие рекомендации https://www.mongodb.com/docs/manual/core/index-creation/#index-build-impact-on-database-performance
Nick
Подскажите, при удалении / добавлении индекса блокируются таблицы? В монгу активно читается-пишется 1-2к rps + репликация.
если соответствие SLA действительно критично то есть еще создание индексов на каждой реплике отдельно https://www.mongodb.com/docs/manual/tutorial/build-indexes-on-replica-sets/
Валерий
Угу... ладно, попробую в ютубе ещё поискать
Nor
коллекции не блокируются на время создания индекса, только в начале и в конце для синхронизации состояния. Как правило это незначительное время. Точно спрогнозировать замедление не получится, т.к. много от чего зависит. Общие рекомендации https://www.mongodb.com/docs/manual/core/index-creation/#index-build-impact-on-database-performance
Вот теперь непонятно. Начинаю тестировать - танком набиваю записи в монгу. Запрос: .find({'_id.c':196807}).explain("executionStats") Индекс _id.c есть: 135мс Индеска нет: 80мс Структура документа: [ { "_id": { "c": int, "r": int }, "cost": int, "date": {"$date": "2023-12-17T14:39:43.000Z"} } ]
Nor
Текущие индексы.
Ящик водки
Аналогично, безусловно примитивный skip limit из hello world pymongo - вершина качества кода.
я же выше спросил - есть другие способы? ответа не последовало, тогда, к чему это твоё бесполезное сообщение? как и другие 2
Nick
Текущие индексы.
эксплейны на https://pastila.nl/ и сколько доков в бд?
Nor
https://pastila.nl/?01cee194/ce6dcb4e8c3648ef88025369543084c8#VzqTN/FoqmSAWD0H5Jq61A== Без индекса.
Nor
С индексом https://pastila.nl/?0011948b/94dc5723d655b661fa72c2807abd73fd#6qwt4bvZWr4hJfuj4RT6Fg==
Andrey
я же выше спросил - есть другие способы? ответа не последовало, тогда, к чему это твоё бесполезное сообщение? как и другие 2
Вы хамите, но я вам отвечу. Других способы есть, искали ли вы их? Skip limit - самый примитивный способ реализации pagination в лоб. Его использует, когда данных мало, когда вызовов со skip мало, и да он тут работает. Если у вас много skip limit(вы об этом выше писали) - это означает, что у вас или безысходная ситуация, или вы ошибочно составили структуру документа, и не можете итерироваться по документам, кроме как требовать от mongodb делать skip. Явление низкой производительности MongoDB со множеством skip - это давно и часто обсуждалось без привязки к вообще какому-либо языку разработки. Например, вопрос, ответ: https://www.mongodb.com/community/forums/t/what-is-the-fastest-way-to-filter-documents-with-pagination-in-collection-with-millions-of-records/209413/3 "MongoDB" как бы пишет, что по мере увеличения количества skip, ,будет медленно, и что можно придумать: https://www.mongodb.com/docs/manual/reference/method/cursor.skip/#behavior Вторая проблема со skip - может возникнуть с консистентностью данных, если в базу пишут более или менее активно. Может просто не "кидать камни" в разрабов почти единственной библиотекой работы с mongodb, а просто погуглить, то найдутся и вопросы, и ответы. Вот тут есть решения и даже красивые картинки с замерами производительности. https://medium.com/swlh/mongodb-pagination-fast-consistent-ece2a97070f3 Можно придумать на backend-е еще более экзотические способы. Но в целом, если у вас много skip limit при запросе и много данных - значит вы точно что-то не то делаете.
Nor
эксплейны на https://pastila.nl/ и сколько доков в бд?
На тестовой 100к+ На проде 50-100кк
Nor
Меня смущает, первичный ключ - объект, по полю которого производится поиск.
Nick
На тестовой 100к+ На проде 50-100кк
смешно однако тестируете, разница в 3 порядка говорит что ваши тесты бессмысленны. Ну и планы выполнения говорят что с таким распределением и такой селективностью поля с колскан выигрывает на данном объеме, т.е. дешевле сделать последовательное чтение всех данных (COLSCAN) чем делать выборки отдельных доков (FETCH). Если у вас реально такая селективность, то действительно использование индекса может и усугубить ситуацию и начнете упираться в предел iops а не в скорость чтения с диска
Alex
Привет всем! Есть недопонимание в работе partial index прошу помочь Чего хочу: все документы с полем url держать в индексе и быстро искать в индексе по полю createdAt Есть: mongod 4.2.18 коллекция part_index_1 c 10 000 документами { _id: ObjectId, createdAt: 42// unix timestamp, url: "/url/to/file" // поля может не быть } конкретно сейчас все 10 000 документов без url поля индекс db.part_index_1.createIndex( {createdAt: 1}, { name: "only_url", partialFilterExpression: { url: {$exists: true}} } ) запрос: db.part_index_1.find({ createdAt: {$gt: 1, $lt: 10000000000} }).hint("only_url").explain("executionStats") explain: pastila никак не могу понять почему на IXSCAN "indexBounds" : {"createdAt" : ["[MinKey, MaxKey]"]} и почему на FETCH "filter" : { "$and" : [ {"createdAt" : {"$lt" : 100000000000000000}}, {"createdAt" : {"$gt" : 1}} ] }
Nick
Привет всем! Есть недопонимание в работе partial index прошу помочь Чего хочу: все документы с полем url держать в индексе и быстро искать в индексе по полю createdAt Есть: mongod 4.2.18 коллекция part_index_1 c 10 000 документами { _id: ObjectId, createdAt: 42// unix timestamp, url: "/url/to/file" // поля может не быть } конкретно сейчас все 10 000 документов без url поля индекс db.part_index_1.createIndex( {createdAt: 1}, { name: "only_url", partialFilterExpression: { url: {$exists: true}} } ) запрос: db.part_index_1.find({ createdAt: {$gt: 1, $lt: 10000000000} }).hint("only_url").explain("executionStats") explain: pastila никак не могу понять почему на IXSCAN "indexBounds" : {"createdAt" : ["[MinKey, MaxKey]"]} и почему на FETCH "filter" : { "$and" : [ {"createdAt" : {"$lt" : 100000000000000000}}, {"createdAt" : {"$gt" : 1}} ] }
видимо дешевле по ресурсам. Хинт далеко не всегда полезен, тем более на таком маленьком количестве данных смысла чтото ускорять нет, все в кеши поместится и колсканом будет дешево. Сделайте хотя бы данных чтобы они в оперативу не влезали
Nick
ну и обновитесь
Alex
ну и обновитесь
версию не сменить реальный объем данных до 30 милионов документов мне не понятно поведение такого индекса, если делать с обычным он должен на стадии IXSCAN найти все удовл. диапозону createdAt, вместо этого достает документ по условию (Fetch) пробовал также на 10 милионах документах, то же странное поведение
Alex
запрос db.part_index_1.find({createdAt: {$gt: 1, $lt: 100000000000000000}, url: {$exists: true}}).hint("only_url").explain("executionStats") explain: pastila не понятно, самом деле зачем, ведь в индекс попали ссылки на документы только с url
Nick
запрос db.part_index_1.find({createdAt: {$gt: 1, $lt: 100000000000000000}, url: {$exists: true}}).hint("only_url").explain("executionStats") explain: pastila не понятно, самом деле зачем, ведь в индекс попали ссылки на документы только с url
но в целом для меня такой запрос выглядит абсурдным, очень широкая выборка в которой индекс вообще не должен примениться изза эвристик. Плюс видно что данных нет подходящих под выборку, т.е. планировщик вообще может что угодно тут соптимизировать лишь бы ничего не делать