Mongo $过滤日期比较

时间:2016-12-09 02:04:28

标签: mongodb date mongodb-query aggregation-framework

我有以下聚合,其中有一个日期比较,我只想抓取$$item.date小于当前时间的文档。

[
    { $match : { "_id" : "57b4c5f0291ebb13110b888e" } },
    { $project : {
            "fulfillments" : {
                $filter : {
                    "input" : "$fulfillments",
                    "as" : "item",
                    "cond" : { "$gte" : ["$$item.date","new Date()"]}
                }
            }
        }
    },

    ...

    ...
]

我对上述问题的重要部分如下:

"cond" : { "$gte" : ["$$item.date","new Date()"]}

这似乎无法正常工作,因为我可以将new Date()更改为10或几乎任何值,但它仍会返回所有文档。我需要它只返回date大于或等于当前日期的文档。

例如,给出以下文件

{
  "_id": "57b4c5f0291ebb13110b888e",
  "fulfillments": [
    {
      "_id": "582deb33bb117300010a2ae5",
      "date": new Date("2016-11-23T17:00:00-0700"),
    },
    {
      "_id": "582deb33bdf17300010a2ae5",
      "date": new Date("2017-11-23T17:00:00-0700"),
    }
}

只应返回以下fulfillment,因为它是2017-11-23

    {
      "_id": "582deb33bdf17300010a2ae5",
      "date": new Date("2017-11-23T17:00:00-0700"),
    }

更新 如果我给出一个准确的文件结构,那就有问题,所以我在下面附上了一个截图来验证这一点。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您只想在计算机上显示当前时间,只需从查询中删除",请参阅下面的示例

> db.test.find().pretty()
{
        "_id" : "57b4c5f0291ebb13110b888e",
        "fulfillments" : [
                {
                        "_id" : "582deb33bb117300010a2ae5",
                        "date" : ISODate("2016-11-24T00:00:00Z")
                },
                {
                        "_id" : "582deb33bdf17300010a2ae5",
                        "date" : ISODate("2017-11-24T00:00:00Z")
                }
        ]
}
>
> db.test.aggregate([
...     { $match : { "_id" : "57b4c5f0291ebb13110b888e" } },
...     { $project : {
...             "fulfillments" : {
...                 $filter : {
...                     "input" : "$fulfillments",
...                     "as" : "item",
...                     "cond" : { "$gte" : ["$$item.date",new Date()]}
...                 }
...             }
...         }
...     }
... ]).pretty()
{
        "_id" : "57b4c5f0291ebb13110b888e",
        "fulfillments" : [
                {
                        "_id" : "582deb33bdf17300010a2ae5",
                        "date" : ISODate("2017-11-24T00:00:00Z")
                }
        ]
}
>