聚合 将 Mongodb 与 dateFromString 匹配

Fra*_*tto 5 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" }}
      ]
    }
  ]
}
}}
])
Run Code Online (Sandbox Code Playgroud)

我的 JSON 是

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

MongoDB:v3.6.3

Akr*_*ion 7

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

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

在这里查看它的工作情况

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

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"
                }
              }
            ]
          }
        ]
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

在这里查看它的工作情况

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