首页 > 解决方案 > 如何通过字符串输入查找集合中的项目?

问题描述

在我的集合中users,我有一个registerDate格式为 ISODate(< string >) 的字段。我需要向 MongoDB 发送请求。我使用 vibe.d 框架,这个框架只能发送反序列化的 JSON 字符串。因此,输入日期可以是“2021-02-28T21:00:00Z”或 UNIX 时间戳。

详细地:

作品:

db.users.find(
    {
        "registerDate":{
            "$gte": ISODate("2021-02-28T21:00:00Z"), 
            "$lt": ISODate("2021-10-31T21:00:00Z")
            }
    })

不起作用:

"$gte": {$date: "2021-02-28T21:00:00Z"}, 
"$lt": {$date:"2021-10-31T21:00:00Z"}

我也尝试:

db.users.aggregate([
    { "$project": {
        "registerDate": {
            "$gte": { "$toDate": "2021-01-07T23:39:49.178Z" },
            "$lt": { "$toDate": "2021-09-07T23:39:49.178Z" }
            }
        }
    }])

然后,我得到错误:

"errmsg" : "由 :: FieldPath 字段名称引起的 $project :: 无效可能不是以 '$' 开头。"

标签: mongodbdateaggregation-framework

解决方案


尝试$expr表达式运算符在$match阶段使用聚合运算符,

db.users.aggregate([
  {
    $match: {
      $expr: {
        $and: [
          {
            $gte: [
              "$registerDate",
              { $toDate: "2021-02-28T21:00:00Z" }
            ]
          },
          {
            $lt: [
              "$registerDate",
              { $toDate: "2021-10-31T21:00:00Z" }
            ]
          }
        ]
      }
    }
  }
])

操场


推荐阅读