Nick
вылетает пайплайн
А какого поведения хочется? Есть же спека языка запросов и вы должны формировать валидные запросы, если хотите чтобы они исполнились. Аналогично во всех других субд и не только.
Alexander
А какого поведения хочется? Есть же спека языка запросов и вы должны формировать валидные запросы, если хотите чтобы они исполнились. Аналогично во всех других субд и не только.
чтобы можно было хранить пустые объекты. может же быть null. или пустая строка. почему нельзя хранить пустой объект? это вопль души….
Nick
Где хранить? В монге вполне себе можно использовать пустые объекты в значениях полей
Vladyslav
Почему Mongo так не любит пустые объекты {} ? Столько из-за этого мороки….
потому что откройте спецификацию bson формата и все сразу станет ясно, что вообще не пишется в монго
Vladyslav
@apivovarov https://stackoverflow.com/questions/18657071/why-mongoid-doesnt-save-boolean-as-true-or-false
Alexander
Где хранить? В монге вполне себе можно использовать пустые объекты в значениях полей
да, хрнаить можно, нельзя в агрегации добавить поле через addFIeld или set.
KisaPS
Как могу составить запрос к Монго на обновление документов, если в документе порядка 100+ полей. А обновить необходимо только существующие в запросе (порядка 80)? Прописывать в Update все поля ? Replace не подходит, тк затирает весь документ
Alexander
потому что откройте спецификацию bson формата и все сразу станет ясно, что вообще не пишется в монго
я посмотрел спецификацию, что из нее я должен был узнать? (насколько я понимаю ее придумали сами ребята из монго и остаются чуть ли не единственными кто ее используют)
Alexander
вот создал пустой объект
Alexander
ну или вот так
Vladyslav
вот создал пустой объект
мб уже почитатет что происходит и когда? разницу между shell`ом и backend + ваш фрейморк => mongo
Alexander
мб уже почитатет что происходит и когда? разницу между shell`ом и backend + ваш фрейморк => mongo
так может объясните - все будет лучше, чем отправлять к спецификации ))
Alexandrr
Боль 😢
почему боль? update({filter_key: value}, {your_fields: foo, ..., your_field: foo})
Alexander
сколько еще раз вам тыкнуть сюда?
а не тыкая ссылки объясинть не можете? и кстати, это не мой бэкэнд был а Mongo Compas
Nick
Как могу составить запрос к Монго на обновление документов, если в документе порядка 100+ полей. А обновить необходимо только существующие в запросе (порядка 80)? Прописывать в Update все поля ? Replace не подходит, тк затирает весь документ
либо если данные плоские, можно в качестве значения $set указать объект с новыми полями. Но это не сработает если надо частично менять какието данные у вложенных объектов, т.к. это можно только через указание путей через точку делать
KisaPS
либо если данные плоские, можно в качестве значения $set указать объект с новыми полями. Но это не сработает если надо частично менять какието данные у вложенных объектов, т.к. это можно только через указание путей через точку делать
Данные плоские, да. А могу , например, обновляемые данные в документе выделить отдельным объектом, и обновлять только этот объект , целиком? 🤔 Придется изменить архитектуру, зато снимет кучу работы на будущее.
Nick
да, хрнаить можно, нельзя в агрегации добавить поле через addFIeld или set.
только теперь понял о чем было, вроде как в следующих версиях уже будет, и может даже забекпортят https://jira.mongodb.org/browse/SERVER-54046 (поправил ссылку, не то скопировалось)
Nick
да, хрнаить можно, нельзя в агрегации добавить поле через addFIeld или set.
и в тикете есть пример обхода в текущих версиях {$set: {a: {$literal: {}}}}
Alexander
и в тикете есть пример обхода в текущих версиях {$set: {a: {$literal: {}}}}
спасибо за ссылку! проблема в том, что когда такие вещи встречаются, если в коде просмотрели, то ошибка возникает в приложении. мы их вычищаем и проверяем, но то тут то там проскальзывают. очень хорошо будет есил исправят )))
Дима
Может быть такое что при удалении объекта из массива если он по середине, то вместо него становится null?
of Astora 𒉭
привет всем у меня есть массив данных - Object.keys. и по этим Object.keys мне нужно найти данные внутри базы с помощью метода find -> find({Object.key: value})
of Astora 𒉭
возможно ли без итерации массива, сразу же искать
Asanali
Всем привет, как посмотреть полную команду в currentOp "command" : { "$truncated": <string>, "comment": <string> } У меня как раз написано $truncated и она сжата
Egor
ребят привет, как мне обновить поле ракетс, дополнив его еще одним объектом?
Egor
ребят привет, как мне обновить поле ракетс, дополнив его еще одним объектом?
элемент массива я хотел бы получать по полю closed если он null
Egor
по типу в послднем авейте хотел апдейтить, но чет догнать не могу как это на монго синтаксисе записать
Alexandrr
ребят привет, как мне обновить поле ракетс, дополнив его еще одним объектом?
update_one({"your_filter": value}, {"games.number_object.rackets": "value"})
Egor
update_one({"your_filter": value}, {"games.number_object.rackets": "value"})
а гейм же массив? он филтроваться должен как то
Alexandrr
а гейм же массив? он филтроваться должен как то
так смотря сколько там объектов и какой у них порядок задан
Egor
ну вот я хочу засортить аррей по полю клосед если оно нулл, и туда полжить еще объект
Egor
кажется что проще в отдельную коллекцию сохранять гейм a в сессии класть ссылку на этот гейм
Egor
const update = await Game.findOneAndUpdate({ _id: oldGameId }, { $set: { ["rackets"[racketPlaytime.racketId]]: { playTime: calculatedPlayTime } } }); это валидный апдейт по ключу поля плейтайм?
Artem
Привет. Ребята, подскажите по росту БД не понимаю как устроено. Я организовал удаление устаревающих данных, но не по ttl, а в сервисе владельце БД есть процедура, которая раз в день по определенному признаку удаляет данные. Предполагалось, что новые записи сперва начнут занимать память, которая освободилась от удаленных данных. При этом специфика очистки такова, что удаляется за день больше чем появляется, так данные удаляются за периоды, в которые ранее было больше нагрузки. Но база продолжает рост, +- с такой же динамикой как до начала удаления. Статистика БД показывает меньшее количество записей в коллекциях, но при этом болший занимаемый объем памяти. Какие процедуры нужно выполнять после обычных delete-ов?
Vladyslav
Соль в том что продолжает рост размер бэкапа, а цель была его снизить, предварительно сильно уменьшив.
делайте бекап, когда процесс удаления полностю закончится, чтобы не бекапить удаленные данные
Artem
делайте бекап, когда процесс удаления полностю закончится, чтобы не бекапить удаленные данные
Процедура бэкапа и процедура удаления ежедневны. Количество записей за время включения процедуры удаления снизилось в коллекции на несколько миллионов. Роста размера записи не было. А бэкап как рос так и растет. Как будь-то удаление не происходит.
Vladyslav
https://www.mongodb.com/docs/manual/faq/storage/#faq-disk-size тут можно прочесть и вероятнее всего вам нужен compact
Egor
а как можно объект дополнять по анлогии с пушом? типо: await User.findByIdAndUpdate(userId, { $push: { [`inventory.racket`]: item } }); только для объекта желательно без мутирования как в этом примере: await Game.findOneAndUpdate({ _id: game.oldGameId }, { $set: { "rackets": { [racketPlaytime.racketId]: { ...calculatedPlayTime } } } });
Artem
Дело в том, что даже в этих ссылках упоминается, что освобожденное место должно использоваться монгой. И compact его высвобождает операционке. А у нас как будь то освобожденное место не используется, и все время БД растет.
Artem
https://www.mongodb.com/docs/manual/faq/storage/#faq-disk-size тут можно прочесть и вероятнее всего вам нужен compact
Не та процедура, которую мы можем позволить выполнять на ровне с удалением на шардированном распределенном кластере. По крайней мере я так понимаю.
🅰️nimeCoder
бд не высвобождает ранее зарезервированную память на диске
🅰️nimeCoder
а я походу не дочитал)
Егор
Ребят, подскажите пожалуйста. Мне нужно внутри кластера с папкой создать ещё одну папку, как это сделать? p.s. Посмотрел, через MongoCompass нельзя, попробовал через mongosh и mongod что-то тоже не выходит
Егор
это не папки, а коллекции и коллекции внутри других коллекций создать нельзя. Опишите что вы глобально хотите сделать
Я разрабатываю сервис для клиник. Есть две бд, одна для входа в админку через web, а другая сохраняет данные с клиник через телегам бота. Мне нужно в web админке отобразить данные с клиник. Сейчас у меня одна бд - одна клиника - один сервер. Я не хочу под каждую клинику клепать однотипный сервак. Думал возможно создать общий один сервер, чтобы с ним оперировать.
Егор
Нет, на моё усмотрение
Nick
обычно делают поле с идентификатором и по которому идет разделение (собсна подход называется мультитенантность). И данные хранятся в одной БД и в общих коллекциях. как раз решает вопрос с тем как бы много вроде бы независимых но одинаковых по структуре баз везти
Егор
Хорошо, спасибо
Егор
Если сделать такую структуру, то переживаю за производительность, если будет 1000 клиентов, не долго ли id будет искаться?
lmn
тыща клиентов куда? вы вопросы на ходу придумываете? просто чтобы что то спросить
Nick
Если сделать такую структуру, то переживаю за производительность, если будет 1000 клиентов, не долго ли id будет искаться?
1000 клиентов ни о чем не говорят, т.к. они могут делать по запросу в день, а могут раз в минуту. Не задумывайтесь об этом, сначала сделайте чтоб работало,а потом будете решать вопросы оптимизации и ускорения, если это действительно потребуется
Viktar
Но надо учесть секьюрность. Если у них будет прямой доступ в базу.
Nick
думаю до вопросов безопасности очень далеко)
Andy
Всем привет. Подскажите, пожалуйста, кто-то пробовал FerretDB https://www.ferretdb.io/ как альтернативу MongoDB. Если да, то поделитесь фидбеком, как работает, какие подводные камни есть, есть ли возможность переехать из MongoDВ в FerretDB без существенных доработок?
Yury
Попробуй курс по монге на codeacademy. Там базовые вещи с теорией и практикой, которая автоматически проверяется компом https://www.codecademy.com/learn/learn-mongodb
Yury
Но агрегаций там нет, кажется
Yury
Еще вот практика https://www.w3resource.com/mongodb-exercises/
Yury
И вот https://www.w3schools.com/mongodb/mongodb_exercises.php
Nick
Всем привет. Подскажите, пожалуйста, кто-то пробовал FerretDB https://www.ferretdb.io/ как альтернативу MongoDB. Если да, то поделитесь фидбеком, как работает, какие подводные камни есть, есть ли возможность переехать из MongoDВ в FerretDB без существенных доработок?
судя по The core of our solution is a stateless proxy, which converts MongoDB protocol queries to SQL, and uses PostgreSQL as a database engine. теряется полностью все преимущества с репликами и шардированием. А по сути вопросы будут к потгресу в части сопровождения. Он умеет в jsonb который наверняка там используется для хранения документов. Решение уровня - мы устали админить монгу, но софт переписывать не хотим, поставим проксю и завернем все в ПГ. Начинать новый проект на нем смысла нет, проще сразу уже PG взять. А про переезд главное миграцию пережить
Artem
Ребят, всем привет. Подскажите пожалуйста подскажите, как сделать полнотекстовый поиск в mongo db (на русском языке)"locale", сейчас использую => collation: { locale: 'ru_RU' } ru тоже пробовал
Artem
Но ни чего не выводит
Artem
а что вы хотите из "полнотекстового"?
у меня есть фильтры, в которых есть данные, так как их много что бы клиент вводил начало какого то определенного данного, а выводилось все возможные данные с содержанием этих символов
Artem
Допустим сюда я начинаю что то вводить
Artem
и он не чего не выводит