首页 > 解决方案 > 使用 dateFromString 聚合匹配 Mongodb

问题描述

亲爱的尝试在 mongo 中按日期过滤,但我没有成功。我传递了 JSON 的查询和结构。

db.getCollection('articles').aggregate([
{ "$match": {
 "$expr": {
  "$and": [
    {
      "$gte": [
        { "$dateFromString": { "creationDate": "10-08-2018", "format": "%m-%d-%Y" }}
      ]
    },
    {
      "$lte": [
        { "$dateFromString": { "creationDate": "10-08-2018", "format": "%m-%d-%Y" }}
      ]
    }
  ]
}
}}
])

我的 JSON 是

{
"_id" : ObjectId("5bbb6b1de75b933850a608fc"),
"title" : "05",
"body" : "asgfasgasfa",
"creationDate" : ISODate("2018-10-08T14:35:07.000Z"),
"operationType" : "C",
"__v" : 0
}

MongoDB:v3.6.3

标签: mongodb

解决方案


如果您要从日期字段中查找“10-08-2018”的匹配项,您可以将$dateToString与以下内容结合使用$eq

db.getCollection('articles').aggregate([
  {
    "$match": {
      "$expr": {
        $eq: [
          "10-08-2018",
          {
            "$dateToString": {
              "date": "$creationDate",
              "format": "%m-%d-%Y"
            }
          }
        ]
      }
    }
  }
])

看到它在这里工作

如果您正在寻找与日期范围匹配的一组记录:

db.getCollection('articles').aggregate([
  {
    "$match": {
      "$expr": {
        "$and": [
          {
            "$gte": [
              "$creationDate",
              {
                "$dateFromString": {
                  "dateString": "10-08-2018",
                  "format": "%m-%d-%Y"
                }
              }
            ]
          },
          {
            "$lte": [
              "$creationDate",
              {
                "$dateFromString": {
                  "dateString": "11-08-2018",
                  "format": "%m-%d-%Y"
                }
              }
            ]
          }
        ]
      }
    }
  }
])

看到它在这里工作

第二个示例的一个注意事项是,它将日期作为 ISO 日期,因此它不会涵盖11-08-2018日的结束,而是2018-11-08T00:00:00.000Z,正如评论所指出的那样matthPen


推荐阅读