我有以下聚合,它有一个日期比较,我只想获取 $$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()
更改为 1
或 0
或几乎任何值它仍然返回所有文件。我需要它只返回 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"),
}
更新 我是否提供了准确的文档结构存在疑问,因此我在下面提供了一个屏幕截图来验证这一点。
最佳答案
如果你只想要机器上的当前时间,只需从查询中删除 "
,请参见下面的示例
> 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")
}
]
}
>
关于mongodb - 带有日期比较的 Mongo $filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41052012/