Bạn chỉ cần một $filter
bên trong $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 ] }
}
}
}}
])
Sản xuất:
{
"_id" : "someId",
"someArray" : [
{
"subId" : 1,
"subArray" : [
{
"field1" : "A",
"filterMe" : "NO"
}
]
},
{
"subId" : 2,
"subArray" : [
{
"field1" : "D",
"filterMe" : "NO"
}
]
}
]
}
Tôi thực sự bọc nó trong một $filter
bổ sung để xóa bất kỳ someArray
các mục trong đó subArray
đã lọc kết quả là kết quả là trống rỗng. Số dặm có thể thay đổi tùy thuộc vào việc bạn muốn làm gì.