MongoDB Compass社区1.16.3与ObjectId + ISODate匹配问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB Compass社区1.16.3与ObjectId + ISODate匹配问题相关的知识,希望对你有一定的参考价值。

我想在MongoDB Compass社区1.16.3上建立一个aggregation,我在同时查询$matchObjectIdISODate阶段有一个奇怪的问题。

非工作$ match阶段

{
  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

但这些$ 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阶段拆分它?有什么想法吗?

Edited

如果我在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社区版本(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") }
}

以上是关于MongoDB Compass社区1.16.3与ObjectId + ISODate匹配问题的主要内容,如果未能解决你的问题,请参考以下文章

Windows MongoDB - 已安装的Compass但在系统中找不到Compass

MongoDB—— 客户端MongoDB Compass

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

MongoDB和MongoDB Compass的安装配置教程

MongoDB Compass 缺少架构选项卡

使用 mongodb compass GUI 连接到 docker 内的 Mongodb