I have the following document
{
"_id": "57b4c5f0291ebb13110b888e",
"first": "John",
"last": "Smith",
"email": "[email protected]",
"fulfillments": [
{
"_id": "57b683e531a5a21679b78e6d",
"created_by_name": "John Smith",
"created_by_id": "57b4c5f0291ebb23110b888e",
"fulfilled_by_name": "John Smith",
"fulfilled_by_id": "57b4c5f0291ebb13110b888e",
"date": new Date("2016-08-23T13:58:15-0700")
}
]
}
For which I have a mongo query that I want to just return the list of fulfillments that have not already occured. This means that the date
property on the fulfillment embedded document is greater than the current time.
db.users.aggregate([
{ $match : { "_id" : "57b4c5f0291ebb13110b888e" } },
{ $project : {
"fulfillments" : {
$filter : {
"input" : "$fulfillments",
"as" : "item",
"cond" : ...SOMETHING HERE TO FILTER ON 'date'
}
}
}
},
{ $unwind : "$fulfillments" },
{ $project : {
"created_by_name" : "$fulfillments.created_by_name",
"created_by_id" : "$fulfillments.created_by_id",
"fulfilled_by_name" : "$fulfillments.fulfilled_by_name",
"fulfilled_by_id" : "$fulfillments.fulfilled_by_id",
"date" : "$fulfillments.date"
}
}
])
I can't figure out what the proper way is to filter on only fulfillments that the date
has not already occured.
The following should give you the desired result
...
$project : {
"fulfillments" : {
$filter : {
"input" : "$fulfillments",
"as" : "item",
"cond" : { $gt: [ "$$item.date", new Date() ] }
}
}
}
...