MongoDB Compass Community 1.16.3 $ проблема совпадения с ObjectId + ISODate - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь создать 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.

enter image description here

Но эти $ соответствуют этапам работы

{
  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")
        }
    }
}]

1 Ответ

0 голосов
/ 20 апреля 2019

Проблема связана с версией MongoDB Compass Community, которую я использовал (1.16.3).

Чтобы решить эту проблему, обновите до последней версии или выше: 1.17.0

Теперь следующее прекрасно работает!

{
  user_id: ObjectId("5c9168ec5530c90d0c5cd98a"),
  value: {$gte: 600},
  datetime: { $gte: ISODate("2019-02-01T00:00:00Z"), $lt: ISODate("2019-04-10T23:59:59Z") }
}
...