Я пытаюсь создать aggregation
на MongoDB Compass Community 1.16.3 , и у меня возникла странная проблема на $match
запросе ObjectId
и ISODate
одновременно.
Неработающий $ match stage
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
Этот запрос вообще не работает и Compass возвращает Expected end of input but "}" found.
Но эти $ соответствуют этапам работы
{
user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
value: {$gte: 600}
}
Отличный результат!
{
value: {$gte: 600},
datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
Отличный результат!
Похоже, что запрос не работает, если я использую ObjectId
и ISODate
одновременно.Итак, я где-то ошибся?Или я должен разделить его на 2 $match
этапов?Есть мысли?
Отредактировано
Если я разделю конвейер на 2 $match
этапов (я удалил value
в этом примере) , это работает хорошо, но я нене знаю, является ли это хорошей практикой и эффективна ли она!
[{
$match: {
user_id: ObjectId("5c9168ec5530c90d0c5cd98a")
}
}, {
$match: {
datetime: {
$gte: ISODate("2019-02-01T00:00:00Z"),
$lt: ISODate("2019-04-01T00:00:00Z")
}
}
}]