Pavel
Вот так работает не совсем как положено, на рабоатет
Pavel
То есть он возвращает еще и тех клиентов, у кого в мероприятиях один из участников имеет статус
Pavel
А надо, чтобы вернул только если именно этот клиент, именно в этом мероприятии был участником со статусом /игрок/
Viktar
Эта агрегация вернёт все записи, где встречается игрок. Если вам надо ограничить мероприятие, добавьте на него условие в матче
yopp
В этом случае агрегация в два шага: $match с $elemMatch и потом $project с $filter по условию
Viktar
Pavel
То есть на первом шаге $match по статусу, а потом фильтр по _id?
yopp
yopp
Pavel
бывает статус Игрок/Пробный
Pavel
или Игрок/Именинник
Pavel
Заказчику привет
yopp
По регекспу без префикса вообще не стоит искать
Pavel
Прошлый мой вариант по скорости занимал 65 секунд
Pavel
А на проде и не спрашивайте
yopp
Pavel
Эту хрень победить не могу черт знает сколько
Viktar
Я бы обошёлся тут без регекспа. Статусы известны. Можно использовать $in. А какое второе условие?
Pavel
Статусы динамически оператор может сделать
Pavel
Первое условие - статус, второе - человек был на мероприятии в этом статусе
Viktar
Так динамически и делайте массив для 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
Ilya
чтоб там был просто объект жс
Виктор
Daniil
добавить перед стейджем $sample стейдж $match с нужным вам условием
Ilya
мб $match ?
Andry
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
Будет ныть в логах
Artem
Если deprecated, то почему нововведенная функция-замена не имеет всех возможностей исходной?
Ilya
Ilya
https://mongoosejs.com/docs/tutorials/findoneandupdate.html
Ilya
ok
Ігор
Как с Атласа можно экспортировать коллекцию?
Dmytro
Ребят, привет. Сразу скажу, есть осадок после РБД. Такой вопрос: в каких случаях делать отдельный документ, а в каких делать вложение?
Я видел в некоторых примерах схему типа:
Post {
- _id
- content
- comments: [{
- user: {ref: ‘User’}
- text
}]
}
А в других случаях было разделение:
Post {
- _id
- content
}
Comment {
- _id
- post: {ref: ‘Post’}
- user: {ref: ‘User’}
- text
}
На сколько я знаю, используя первый вариант нельзя сделать нормально пагинацию, но вообще не понятно, когда и какой вариант лучше, как знакомому с РБД, мне ближе второй, но хочу узнать как правильно с точки зрения оптимизации..
Sergey
Ребят, привет. Сразу скажу, есть осадок после РБД. Такой вопрос: в каких случаях делать отдельный документ, а в каких делать вложение?
Я видел в некоторых примерах схему типа:
Post {
- _id
- content
- comments: [{
- user: {ref: ‘User’}
- text
}]
}
А в других случаях было разделение:
Post {
- _id
- content
}
Comment {
- _id
- post: {ref: ‘Post’}
- user: {ref: ‘User’}
- text
}
На сколько я знаю, используя первый вариант нельзя сделать нормально пагинацию, но вообще не понятно, когда и какой вариант лучше, как знакомому с РБД, мне ближе второй, но хочу узнать как правильно с точки зрения оптимизации..
Тут относительно сложно, какой объем вложенных вас ожидает?
Dmytro
Dmytro
Соответственно, нужна будет пагинация
Sergey
Dmytro
Sergey
Порядка 2-3кб
Это мелочи. Пагинауию сделать на фронте можно
Sergey
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
Это коллекция клиентов, где надо найти количество мероприятий в статусе "игрок"