यहाँ समस्या यह है कि WorkDoneBy
एक अन्य सरणी में नेस्टेड एक सरणी है (ItemReport
) इसलिए सिंगल $filter
पर्याप्त नहीं है क्योंकि आपको दो बार पुनरावृति करने की आवश्यकता है। आप $map
जोड़ सकते हैं बाहरी सरणी पर पुनरावृति करने के लिए:
db.records.aggregate([
{
"$project": {
"ItemReport": {
$map: {
input: "$ItemReport",
as: "ir",
in: {
WorkDoneBy: {
$filter: {
input: "$$ir.WorkDoneBy",
as: "value",
cond: {
"$and": [
{ "$ne": [ "$$value.DateCompleted", null ] },
{ "$gt": [ "$$value.DateCompleted", new Date("2017-01-01T12:00:00.000Z") ] },
{ "$lt": [ "$$value.DateCompleted", new Date("2018-12-31T12:00:00.000Z") ] }
]
}
}
}
}
}
}
}
}
])