Игорь
"$points._id" - вместо это просто $_id
Почему просто $_id если я не делал unwind points
Игорь
Он ж не влез в обьект
Nick
Почему просто $_id если я не делал unwind points
если это массив, то должны были сделать
Игорь
Делаю запрос из коллекции points
Nick
тогда верно составлено
Игорь
Такой запрос тоже неудача, я не знаю в какую сторону копать
Nick
а вручную запрос в монгошеле отрабатывает?
Nick
Такой запрос тоже неудача, я не знаю в какую сторону копать
тут анвинд не к чему по сути, _id останется от _id объекта, а то что вам нужно будет также $points._id. Но и без анвинда должно было сработать
Nick
Делаю запрос из коллекции points
я должен спросить, а точно ли есть совпадения между name и _id в points?
Игорь
Игорь
В points
Игорь
Проверил запрос в шелле компаса , тоже самое
Игорь
Может eq не может сравнивать по ObjectId?
Nick
тут похоже проблема с массивом
Игорь
Игорь
Nick
такс, это такое поведение $eq внутри $expr: оно сравнивает по значению, а не как в случае find-а испольузется для фильтрации https://docs.mongodb.com/manual/reference/operator/aggregation/eq/
Игорь
шик блеск, как тогда сравнивать
Игорь
Я отталкивался от этого https://stackoverflow.com/questions/41093647/mongodb-join-on-id-field-from-string-to-objectid
Nick
шик блеск, как тогда сравнивать
pipeline: [ {$unwind: "$points"}, {$match: { $expr: { $eq: ["$points._id", "$$objName"] } },}, ],
Игорь
воу
Игорь
работает
Игорь
спасибо большое
Nick
только это будет без индексов и медленно на больших объемах
Leksey
Похоже это запрос репликой доп данных из оплога праймари. А нагрузка на праймари ноде случаем не увеличивается при переходе на 6 монгус?
нет стата в графане cpu/ram 1:1 как и был до апгрейда модуля при этом есть определенные непонятные ситуации апгрейдим монгуз через буквально 2-3 минуты происходят сильные лаги (90% запросов отдает по 30/60 секунд) потом стабилизируется далее повторяется будто циклически кому-то нужен oplog.rs (и надо его получить за 2 секунды) не получаем oplog.rs и все повторяется
🅰️nimeCoder
Имеется такой документ Как во всех документах, изменить payload, у объекта с _id равным c275a8dc295a89c4e237b020 внутри объекта childrens в массиве по любому ключу ( от 1 до ∞ ) Для большей ясности, из этого: { "_id": "ЛЮБОЙ ID", "childrens": { "ЛЮБОЕ ЧИСЛО": [ { "_id": "c275a8dc295a89c4e237b020", "payload": "123" } ], } } получить: { "_id": "ЛЮБОЙ ID", "childrens": { "ЛЮБОЕ ЧИСЛО": [ { "_id": "c275a8dc295a89c4e237b020", "payload": "НОВОЕ ЗНАЧЕНИЕ" } ], } } При этом c275a8dc295a89c4e237b020, может находится в массиве childrens.ЛЮБОЕ ЧИСЛО по любому индексу
Nick
Имеется такой документ Как во всех документах, изменить payload, у объекта с _id равным c275a8dc295a89c4e237b020 внутри объекта childrens в массиве по любому ключу ( от 1 до ∞ ) Для большей ясности, из этого: { "_id": "ЛЮБОЙ ID", "childrens": { "ЛЮБОЕ ЧИСЛО": [ { "_id": "c275a8dc295a89c4e237b020", "payload": "123" } ], } } получить: { "_id": "ЛЮБОЙ ID", "childrens": { "ЛЮБОЕ ЧИСЛО": [ { "_id": "c275a8dc295a89c4e237b020", "payload": "НОВОЕ ЗНАЧЕНИЕ" } ], } } При этом c275a8dc295a89c4e237b020, может находится в массиве childrens.ЛЮБОЕ ЧИСЛО по любому индексу
$arrayToObject и $objectToArray, анвинды и группировки вам в помощь. Когда устанете делать запрос прикиньте как можно было бы обойтись без "ЛЮБОЕ ЧИСЛО" в качестве ключа и как быстро вы сможете мигрировать на новую нормальную структуру данных. Ну и потом скорее всего проще скриптом все это сделать чем извращаться
Ilya
только зашёл а уже удалённый аккаунт...
Kinderwond
можно ли в атласе во вкладке perfomance вычислить slow queries (коллекция, операция)?
Abdulloh
Привет ребята Как можно эту ошибку исправить
Hellomik
что быстрее lookup внутри Lookup или сделать 2 соседних лукапа и самим уже замутить ?
B
Ребята как лучше можно реализовать категории, подкатегории для товара
Р00-👨🏻‍💻Михаил
category с полем parent item с полем category
B
Есть примерно вот такая бд. Где категории уже заполнены и при добавлении товара продавец лишь выбирает категорию. Теперь как в странице продавца можно вывести Категории к которым его товары относятся
Alex
Все добрый день Коллеги, подскажите пожалуйста, как правильно описать запрос, чтобы он проверил, если ли в базе объект, если нет то создал и вернул созданный либо найденный объект Вот так все работает, кроме того, что если объекта нет, то он его создает, но не возвращает const user = await User.findOneAndUpdate( { userId, operator }, { $setOnInsert: config }, { upsert: true, returnDocument: 'after', useFindAndModify: false } )
yopp
вам нужен аналог флага returnNewDocument: true https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
Konstantin
тут такое дело что на уровне протокола нет команды findOneAndUpdate. есть findAndModify и есть update. update не умеет возвращать изменённый документ и похоже что флаг useFindAndModify – это чисто монгузовская фигня, которая говорит монгузу использовать именно update. а вот findAndModify как раз всегда возвращает документ, либо в состоянии до обновления либо после и драйвер мапит returnDocument на поле new запроса…
Illia
Привет. В коллекции лежат тысячи документов. В каждом из них есть такие поля: accountID, accountOwner, accountName, field1, field2, field3, field4, ... При получении данных, как сгруппировать fields из разных документов в массив? (первые три поля везде будут одинаковые). На выходе должен быть один или несколько документов, в зависимости от того сколько разных accountID, accountOwner, accountName найдётся. Стоит ли вообще группировать это так или просто работать с сырым результатом программой?
Illia
Попробуйте агрегацию - group + adToSet
https://www.mongodb.com/community/forums/t/how-to-group-on-multiple-columns-and-sum-up-individual-columns/4020 Нашел такое интересное применение. Решил попробовать хотя бы первых 2 шага сделать, но время ответа превысило 20-30 секунд, не знаю почему. Видимо, пока обойдусь просто .find-ом, ибо он срабатывает моментально
Игорь
Добрый, в много вообще возможно при if выполнять выражения? Просто все что я нарыл это просто статический вывод.
Игорь
Я имел в виду это
Игорь
но не суть, я уже решил
Игорь
Просто я не совсем на тот момент не разобрался как работает $cond, спасибо за интерес к моей проблеме .
Dev
Подскажите, есть ли в монго субтранзакции? Делаю тесты, хочу каждый тест обертывать в транзакцию, чтобы октатывать все изменения после каждого теста. Но во многих функциях используются транзакции... Подскажите, как в таком случае лучше поступить?
камил
Привет, как в aggregate получить случайную запись с условием НЕ?
камил
Привет, как в aggregate получить случайную запись с условием НЕ?
пытаюсь сделать что-то такое, но получаю ошибку $not is not allowed in this atlas tier
Viktar
пытаюсь сделать что-то такое, но получаю ошибку $not is not allowed in this atlas tier
Посмотрите на $ne https://docs.mongodb.com/manual/reference/operator/query/ne/
камил
Посмотрите на $ne https://docs.mongodb.com/manual/reference/operator/query/ne/
спасибо большое, а еще вопрос, существует условие, чтобы проверить есть ли число в списке?
камил
допустим список by: [] условие есть ли число 123 в списке by
я должен получить все документы в которых нет числа этого
камил
{by:123}
так мне нужно получить документ в массиве by которого нет числа 123
камил
{by:123}
а это выдает где есть число
камил
Viktar
{by:{$ne:123}}
камил
{by:{$ne:123}}
еще вопрос вот я добавил к 123/32 и это 32 всегда рандомное, получать из базы зная только 123?
Viktar
Не понимаю вашего вопроса. Вам надо 123 делить на какое-то то рандомное число?
камил
Не понимаю вашего вопроса. Вам надо 123 делить на какое-то то рандомное число?
нет, вот смотрите пример: by: [] id - это id пользователя mark - это его оценка записываю в by, к примеру id/mark как мне зная только id получить всю строку id/mark?
камил
вроде ясно выразился
Viktar
Вы получаете весь документ. Выбирайте из него те поля которые надо.
Viktar
Или ид и Марк это одно составное поле?
камил
так, секунду
камил
Вы получаете весь документ. Выбирайте из него те поля которые надо.
вот поле: by: [] в него записываются данные: id юзера/ оценка юзера выглядит это так by: ['123123/10', '34534/5', '53543/2'] я пытаюсь получить поле by зная только id юзера, без оценки
камил
в обычном python можно сделать условие: if id in by, но это pymongo
Viktar
вот поле: by: [] в него записываются данные: id юзера/ оценка юзера выглядит это так by: ['123123/10', '34534/5', '53543/2'] я пытаюсь получить поле by зная только id юзера, без оценки
Это поиск по вхождению. https://docs.mongodb.com/manual/reference/operator/query/regex/ А зачем вам усложнения? Сделайте объект {id:123123, mark:10} и складывайте его в массив
Viktar
И сможете искать {'by.id':123}
камил
типо: by: {id: 123, mark: 213}?
Viktar
db.collection.insertOne({id:123, mark:10})
камил
db.collection.insertOne({id:123, mark:10})
а, так дело в том, что у меня пользователи оценивают пользователей
камил
и как бы у каждого пользователя есть поле by
Viktar
Точно
камил
в него должны записываться id и оценки всех пользователей
Viktar
db.collection.insertOne({by:[{id:123, mark:10}]})