आपको बस एक $filter
. की आवश्यकता है एक $map
. के अंदर :
db.junk.aggregate([
{ "$project": {
"someArray": {
"$filter": {
"input": {
"$map": {
"input": "$someArray",
"as": "some",
"in": {
"subId": "$$some.subId",
"subArray": {
"$filter": {
"input": "$$some.subArray",
"as": "sub",
"cond": { "$ne": [ "$$sub.filterMe", "YES" ] }
}
}
}
}
},
"as": "some",
"cond": { "$gt": [ { "$size": "$$some.subArray" }, 0 ] }
}
}
}}
])
उत्पादन:
{
"_id" : "someId",
"someArray" : [
{
"subId" : 1,
"subArray" : [
{
"field1" : "A",
"filterMe" : "NO"
}
]
},
{
"subId" : 2,
"subArray" : [
{
"field1" : "D",
"filterMe" : "NO"
}
]
}
]
}
मैं वास्तव में इसे एक अतिरिक्त $filter
. में लपेटता हूं किसी भी someArray
. को हटाने के लिए प्रविष्टियाँ जहाँ फ़िल्टर किया गया subArray
परिणामस्वरूप खाली हो गया। आप जो करना चाहते हैं, उसके आधार पर माइलेज अलग-अलग हो सकता है।