Alexandrr
что имется ввиду? поконкретней
он имеет ввиду find_one_and_update
Александр
он имеет ввиду find_one_and_update
Нет, речь идёт о создании, не обновлении данных в базе
Alexandrr
он имеет ввиду find_one_and_update
+ upset но в таком случае будут коллизии данных. нужен uuid, но это в идеале, а так простой insert_one() тогда
Sunrise
Ребят подскажите, сам с фронтенда, но ввиду задач пришлось фуллстечить и вкатываться в бек, сейчас стоит вопрос касательно работы с бд(mongodb), стек использую node express ts, собственно вопрос в чем, мне необходимо изначально правильно сформировать и задать структуру бд? Образно выражаясь, накидать себе схему какие коллекции что содержат и далее строить бек основываясь на этой структуре? Или можно постепенно реализовывать частичный функционал и изменять структу бд?
Димитрий
Привет всем, сейчас будет мега тупой вопрос. Как долго будет создаваться кластер? Я абсолютный ноль в бэке и даже не понимаю как правильно гуглить такого рода вопросы
Mikhail
всем привет. Стоит монга, 6 коллекций, в одной из них 7кк записей, в двух друх по миллиону, в остальных десятки тысяч, используется для сервера с нагрузкой порядка 100 запросов в минуту. Все было нормально, до момента, пока несколько дней назад монга не начала медленно отвечать (бывает минуты) на запросы. Подскажите, как такое можно дебажить? с чего подойти?
Ян 🌙
Всем привет, такая конструкция будет работать? updateOne({_id: idPet}, {$inc:{"options": -1, "stats.$.power": 1} }, async function(err, result) {
Ян 🌙
Что-то у меня оно вообще не идет..
Ян 🌙
MongoServerError: The positional operator did not find the match needed from the query.
Ян 🌙
Вот ошибка
Viktar
MongoServerError: The positional operator did not find the match needed from the query.
Что бы использовать $ вам надо добавить в фильтр условие для массива stats. Иначе не понятно какой элемент массива апдейтить
Ян 🌙
разве power не указывает на то, что я хочу отредактировать?
Viktar
Странно, в другом случае работает, и какой должен быть фильтр?
updateOne({_id: idPet, "stats.power":22}, {$inc:{"options": -1, "stats.$.power": 1} }
Viktar
разве power не указывает на то, что я хочу отредактировать?
Нет. Вы в фильтре указываете только документы. В данном случае все где ид = пет ид
Viktar
Ну так я и хочу отредактировать его
Я про то. Что вы не указываете какой именно элемент массива в этом документе хотите проапдейтить
Viktar
Это как указать дом, но не указать квартиру
Vitalii
Конкретно цей приклад, можна зробити двума запитами, першим витягнути айдішніки, а наступним вже entity. Другий варіант через querybuilder та rsm, якщо хочеться одним запитом, там зчітити можна, побудувати dql select запит без умови where, через getSql отримати sql, і там з приватної змінної витягнути готовий rsm, потім дописати до sql свою умову і виконати запит з готовим rsm
Vitalii
не гарантирую, возможно что-то вроде такого https://pastebin.com/m30vMEQf ненавижу эти короткие синтаксисы $qb = $this->createQueryBuilder('c'); $customers = $qb->andWhere( $qb->expr()->in('c.id', $sub->getDQL()) )->getQuery()->getResult(); как вы их читаете - хз
Ян 🌙
Viktar
Как мне до него добраться?)
updateOne({_id: idPet, "stats.power":22}, {$inc:{"options": -1, "stats.$.power": 1} }
Viktar
Тааак, а если 22 - постоянно меняется..
Тут уже ваша бизнес логика. Что конкретно нужно обновить.
Viktar
Если все элементы. То просто уберите $ в сет. "stats.power":1
Viktar
Да. Можно без фильтра
Ян 🌙
Да. Можно без фильтра
Cannot create field 'power' in element {stats: [ { power: 22, defense: 24, health: 296 } ]}
Viktar
А скиньте запрос
Ян 🌙
А скиньте запрос
updateMany({_id: idPet}, {$inc:{"options": -1, "stats.power": 1 } }, async function(err, result) {
Viktar
Хм. Может так тоже нельзя.
Viktar
updateMany({_id: idPet, "stats.power":{$exists: true}}, {$inc:{"options": -1, "stats.$.power": 1 } },  async function(err, result) {
Viktar
Попробуйте вот так.
Viktar
Но проверьте, все элементы массива апдейтятся или только первый
Viktar
И поскольку у вас фильтр по _id используйте апдейтОне
Nick
всем привет. Стоит монга, 6 коллекций, в одной из них 7кк записей, в двух друх по миллиону, в остальных десятки тысяч, используется для сервера с нагрузкой порядка 100 запросов в минуту. Все было нормально, до момента, пока несколько дней назад монга не начала медленно отвечать (бывает минуты) на запросы. Подскажите, как такое можно дебажить? с чего подойти?
для начал решить, а надо ли вообще ускорять запросы - ускорение ради ускорения как правило трата времени. а далее стандартно, если не известны какие запросы тормозят, то поискать медленные запросы в логах (возможно придется включить). Потом с помощью explain разобраться используются ли индексы и создать для запросов, которые действитльено стоит ускорить. если не помогло, то углубляемся https://www.mongodb.com/docs/cloud-manager/analyze-slow-queries/
Ilya
Всем привет. Не могу разобраться в refs в mongoose. У меня есть course c массивом lessons, которые я подключаю через ссылку, так же есть связь lessons к конкретному курсу. Когда я создаю урок к курсу я завязываю урок к курсу (по courseId) так как показано на скрине (возможно не верно!). В то же время как связать курс с уроком я себе не представляю. Подскажите?)
Ilya
пахнуло реляционной БДшкой в докементоориентированной.... Может вам постгрес больше подойдет? =)
Ну нет, на данном этапе использую mongo. Это более учебный проект, пытаюсь разобраться. Да, есть момент, что пытаюсь так завязаться, как в реляционке. По сути у меня есть post-запрос /courses/:courseId/lessons/:lessonId где урок создаётся и зависит от курса. То есть урок от курса неразрывен. вот как это реализовать на монго? Для этого монга не подходит?))
Dmitry
Индексы есть, а в каком смысле настроена?
Настроена в плане, чтобы все необходимые индексы были созданы
Отдельно Очумелые
или $lookup
Alexandrr
Всем привет. Не могу разобраться в refs в mongoose. У меня есть course c массивом lessons, которые я подключаю через ссылку, так же есть связь lessons к конкретному курсу. Когда я создаю урок к курсу я завязываю урок к курсу (по courseId) так как показано на скрине (возможно не верно!). В то же время как связать курс с уроком я себе не представляю. Подскажите?)
все правильно делаешь. у урока поле "courses" = [id, id, ..., id] у курса поле "lessons" = [id, id, ..., id] вот тебе и получились сквозные ссылки. только там уже сам разбирайся какие типы данных нужны списки или единичный id строчный, либо дефолтный _id
Konstantin
привет всем! ввел эту команду Warning: The unit file, source configuration file or drop-ins of mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Konstantin
при попытке перезапустить монгу: systemctl restart mongod Failed to restart mongod.service: Unit mongod.service not found.
Konstantin
привет всем! ввел эту команду Warning: The unit file, source configuration file or drop-ins of mongod.service changed on disk. Run 'systemctl daemon-reload' to reload units.
у меня из-за этой команды пропали все бд, соответственно проекты уничтожены(
Ilya
сохроняй id в одного всписок другому, потом сабзапросом цепляй через $in
Да, примерно так и сделал. Спасибо. Через $in думаю пока незачем ходить, всё выводится и так
Dmitry
а как узнать какие мне индексы нужны
Посмотрите какая Query у вас используется, также можно использовать встроенные средства. Точно не помню, но вроде функция explain показывает подробную информацию. Но в первую очередь вам надо посмотреть на mongo shell т.к. если там медленно, то переходить к индексами и прочему.
Air
Значение 00001 Я могу записать только как string?
Tony
Значение 00001 Я могу записать только как string?
Ну можешь хранить как int, а при выводе куда надо делать форматирование с нулями
Alexandrr
Значение 00001 Я могу записать только как string?
https://data-flair.training/blogs/mongodb-data-types/
lmn
в байтах можешь хранить
Air
app.locals.collection = mongoClient.db("test").collection("users").createIndex({"code" : 1}); const collection = req.app.locals.collection; const product = await collection.find({code: code}).toArray(); В этом коде ищу ли я по индексу? Почему вылезает ошибка collection.find is not a function
Илья
Документацию открой
Sergey
Привет всем Подскажите пожалуйста, чем лучше полностью удалить поле в документе? Используя unset получается, что затирается только значение поля в документе, а само название поля остается
yopp
Потому что ты шизик
Такие высказывания недопустимы в нашей группе. Read only на месяц. У нас профессиональное сообщество. Относитесь к участникам с уважением. Здесь не принято посылать в «в Гугл» или «почитать документацию» без ссылки на релевантную статью.
Sergey
https://www.mongodb.com/docs/manual/reference/operator/update/unset/
И правда работает, просто я неверно использовал. Спасибо Проблема оказалась глубже, база наполняется из json и чаще всего id отсутствует в базе, все ок, наполняю через insert_many. Но иногда прилетает обновление id по одному полю, использовать update_many не совсем корректно, ведь оно исправит и дату возникноваения первого события или не добавит весь json, если он был новым.. Может есть какой-то бестпрактис в таком случае?
Sergey
Да, это я использовал криворуко, точнее не заметил, что в цикле назад пытаюсь набивать то же поле.
Alexander
Почему Mongo так не любит пустые объекты {} ? Столько из-за этого мороки….
Alexander
А что например не так?
Например, в паплайне $set и какое нибудь поле filters, которое приходит из запроса. Или где-нибудь в апдейтах, какое-нибудь поля оказывается пустым объектом.