Pavel
Вот так работает не совсем как положено, на рабоатет
Pavel
То есть он возвращает еще и тех клиентов, у кого в мероприятиях один из участников имеет статус
Pavel
А надо, чтобы вернул только если именно этот клиент, именно в этом мероприятии был участником со статусом /игрок/
Viktar
Эта агрегация вернёт все записи, где встречается игрок. Если вам надо ограничить мероприятие, добавьте на него условие в матче
yopp
В этом случае агрегация в два шага: $match с $elemMatch и потом $project с $filter по условию
Pavel
То есть на первом шаге $match по статусу, а потом фильтр по _id?
yopp
А разве в матче нельзя добавить второе условие?
В агрегации проекцию в $match нельзя сделать
Viktar
То есть на первом шаге $match по статусу, а потом фильтр по _id?
А статус игрок вариативный? Если он всегда одинаковый, тогда не надо искать по регекспу.
Pavel
бывает статус Игрок/Пробный
Pavel
или Игрок/Именинник
Pavel
Заказчику привет
yopp
По регекспу без префикса вообще не стоит искать
Pavel
Прошлый мой вариант по скорости занимал 65 секунд
Pavel
А на проде и не спрашивайте
yopp
@dd_bb меня что смущает, это отличие эстимэйта от реального выполнения в ~150 раз
Попробуйте добавить в регулярное выражение совпадение по префиксу (\A)
Pavel
Эту хрень победить не могу черт знает сколько
Viktar
Я бы обошёлся тут без регекспа. Статусы известны. Можно использовать $in. А какое второе условие?
Pavel
Статусы динамически оператор может сделать
Pavel
Первое условие - статус, второе - человек был на мероприятии в этом статусе
Viktar
Так динамически и делайте массив для in.
yopp
Первое условие - статус, второе - человек был на мероприятии в этом статусе
Если где-то есть список существующих статусов, то найдите необходимый статус там и потом ищите по полному совпадению через $eq/$in
Pavel
Viktar
db.collection.find({"event.status":{$in:[ a,b,c]},"event.id":id})
Pavel
Так?
Viktar
Можно индекс навесить ещё на эти два поля и будет быстро
Viktar
Не вижу смысла использовать агрегацию и регексп.
Viktar
https://docs.mongodb.com/manual/reference/operator/query/elemMatch/
Viktar
'''db.survey.find( { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } } )'''
Viktar
Вот этот пример мне кажется вам подходит. Только добавьте in если статусов несколько
Pavel
Спасибо, ребят
Nikita
Всем привет. Подскажите, как сделать поиск примерно по такому запросу: db.getCollection("questions") .find({ updatedAt: { $lt: new Date(), $gte: new Date(new Date().setHours(00, 00, 00)), }, $where: "this.updatedAt !== this.createdAt", }) .count(); Т.е. хочу найти записи за сегодня, в которых были обновления. createdAt,updatedAt - это ISODate.
Виктор
Привет. Помогите разобраться. Нельзя изменить неизменяемое поле... Но до этого все работало
Ilya
чтоб там был просто объект жс
Daniil
добавить перед стейджем $sample стейдж $match с нужным вам условием
Ilya
мб $match ?
Andry
нет?
Ilya
чта
Konstantin
Синкин 🙈
Ilya
м?
Danila
Всем привет, никто не подскажет как конвертнуть простую монгодб в реплику на винде 10? сморел инфу в доках, но не подошло.
Alexey
Привет, можете подсказать как удалить все сообщения из БД? id-шники сообщений хранятся в массиве messages, нужно найти в таблица Message сообщения с этими id и удалить, как это наиболее оптимально сделать?
Pavel
Pavel
Ребят, ну не могу победить эту хрень
Pavel
Работает, конечно, но капец как долго даже с индексами
Pavel
36 секунд
Pavel
45 стало
Ilya
а чо надо вообще
Artem
Подскажите, почему это
Artem
Возвращает это
Artem
Игнорируя new: true
Дмитрий
Только ключ выбирай под запрос, либо равномерно мажущий
Ilya
Подскажите, почему это
findOneAndUpdate мб заюзать?
Artem
Будет ныть в логах
Artem
Если deprecated, то почему нововведенная функция-замена не имеет всех возможностей исходной?
Ilya
https://mongoosejs.com/docs/tutorials/findoneandupdate.html
Artem
эм, этот метод как раз нет
перепутал с findAndModify, спасибо
Ilya
ok
Ігор
Как с Атласа можно экспортировать коллекцию?
Dmytro
Ребят, привет. Сразу скажу, есть осадок после РБД. Такой вопрос: в каких случаях делать отдельный документ, а в каких делать вложение? Я видел в некоторых примерах схему типа: Post { - _id - content - comments: [{ - user: {ref: ‘User’} - text }] } А в других случаях было разделение: Post { - _id - content } Comment { - _id - post: {ref: ‘Post’} - user: {ref: ‘User’} - text } На сколько я знаю, используя первый вариант нельзя сделать нормально пагинацию, но вообще не понятно, когда и какой вариант лучше, как знакомому с РБД, мне ближе второй, но хочу узнать как правильно с точки зрения оптимизации..
Dmytro
Тут относительно сложно, какой объем вложенных вас ожидает?
Допустим, среднее значение - 1000 комментариев к посту
Dmytro
Соответственно, нужна будет пагинация
Sergey
Допустим, среднее значение - 1000 комментариев к посту
Какой размер внутреннего документа?
Sergey
Порядка 2-3кб
Это мелочи. Пагинауию сделать на фронте можно
Dmytro
Это мелочи. Пагинауию сделать на фронте можно
То есть, можно не разделять сущности и делать вложенную схему?
Dmytro
Я считаю что да
Спасибо огромное за ответ!)
Sardor
Всем привет! Пишу такой запрос на node.js: model.find({}, { id: 1, curPoints: 1, _id: 0 }).toArray() И из коллекции я получаю все документы со всеми полями, а не только id и curPoints. Что я делаю не так? Решено: второй аргумент нужно было передать так: { fields: { id: 1, curPoints: 1, _id: 0 }, хотя в доке указано не так, да и монга ругается, что deprecated, но пока лучше вариантов не нашел
Pavel
Pavel
Я могу обратить к $_id корневому в $eq ?
Pavel
Это коллекция клиентов, где надо найти количество мероприятий в статусе "игрок"