0

我正在尝试aggregationMongoDB Compass Community 1.16.3上构建一个,但同时在$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") }
}

此查询根本不起作用,指南针返回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") }
}

完美的结果!

ObjectId如果我同时使用and ,查询似乎不起作用ISODate。那么,我是不是在某个地方犯了错误?还是我必须把它分成两个$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")
        }
    }
}]
4

1 回答 1

1

问题来自我使用的 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") }
}
于 2019-04-20T16:20:12.603 回答