我在MongoDB中有一个这样的聚合管道:

[
  {
    "$match": {
      "event": "LOG_ACCESS",
      "createdAt": {
        "$gte": ISODate("2023-01-24T00:00:00+00:00"),
        "$lt": ISODate("2023-01-25T00:00:00+00:00")
      }
    }
  }
]

这是可行的,但我想知道是否可以使用纯JSON语法重新表述它(请注意,ISODate()不符合JSON语法).我查了一下MongoDB extended JSON,$date接线员看起来不错,所以我试了试:

[
  {
    "$match": {
      "event": "LOG_ACCESS",
      "createdAt": {
        "$gte": {"$date": "2023-01-24T00:00:00+00:00"},
        "$lt": {"$date": "2023-01-25T00:00:00+00:00"}
      }
    }
  }
]

但这并不管用.我得到了这个错误:

字段不能以‘$’或‘.’开头,字段路径为:$Date

有没有办法用纯JSON表达上面的查询?

提前感谢您的反馈!

推荐答案

据我所知,$date不用于查询/聚合,但您应该能够使用$toDate.需要注意的是,您还需要将转换为日期的过程包装在表达式中.

示例:

[
    {
        "$match": {
            "event": "LOG_ACCESS",
            "$expr": {
                "$and": [
                    {"$gte": ["$createdAt", {"$toDate": "2023-01-24T00:00:00+00:00"}]},
                    {"$lte": ["$createdAt", {"$toDate": "2023-01-25T00:00:00+00:00"}]}
                ]
            }
        }
    }
]

Mongodb相关问答推荐

更新查询mongoose 中的礼宾更新字段

MongoDB聚合:将文档列表转换为列表

MongoDB合并按键更新值的对象数组

在单个mongo文档中组合数组与聚合

带dropTarget的MongoDB renameCollection命令是原子的吗

MongoDB $lookup 查找字段值数组

使用mongo'db.Decode(&dto)映射一个嵌套的 struct

数组过滤器 MongoDB

如何更新mongo中列表最后一个对象的属性

有没有一种方法可以找到一个文档并通过 Go 更改 mongodb 中的 id/value 来克隆它

连接到远程 mongo 服务器导致异常连接失败

mongoose默认值等于其他值

mongodump 是否锁定数据库?

MongoDB $或PHP中的查询

在 mongodb 的一次更新调用中推送到两个单独的数组

如何对连接到 mongo 的方法进行单元测试,而不实际连接到 mongo?

插入违反唯一索引的 MongoDB 文档时如何捕获错误?

使用自定义 _id 值时 mongodb 中的 Upserts

如何使用 mongoose 连接到 mongoDB Atlas

用于 MongoDB 的 Node.js 模块