MongoDB Compass Community 1.16.3 $match 问题与 ObjectId + ISODate

MongoDB Compass Community 1.16.3 $match issue with ObjectId + ISODate

我正在尝试在 MongoDB Compass Community 1.16.3 上构建一个 aggregation,我在 $match 上遇到了一个奇怪的问题同时查询 ObjectIdISODate

非工作$match阶段

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

此查询根本不起作用,Compass return Expected end of input but "}" found.

但是这些 $match 阶段有效

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

完美的结果!

如果我同时使用ObjectIdISODate,查询似乎不起作用。那么,我在某处犯了错误吗?还是我必须将它分成 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")
        }
    }
}]

问题出在我使用的 MongoDB Compass Community 版本 (1.16.3)。

To solve it, update to the latest version or above: 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") }
}