Sie können die folgende Abfrage verwenden.
Ein paar Dinge, die ich geändert habe.
1.Kein $elemMatch
wird für einzelne Kriterien benötigt. Verwenden Sie stattdessen die Punktnotation.
2.Verschieben Sie die $map
der Untergruppe innerhalb der $map
der Gruppe Betreiber.
[
{"$match":{
"empId":"19107",
"address.country":"AUS",
"group.primaryGroup.primary":"Y",
"group.subGroup.primarySubGroup.primary":"Y"
}},
{"$project":{
"empId":1,
"mobile":1,
"address":{"$filter":{"input":"$address","as":"d","cond":{"$eq":["$$d.country","AUS"]}}},
"group":{
"$map":{
"input":"$group",
"as":"v",
"in":{
"groupId":"$$v.groupId",
"primaryGroup":{"$filter":{"input":"$$v.primaryGroup","as":"vp","cond":{"$eq":["$$vp.primary","Y"]}}},
"subGroup":{
"$map":{
"input":"$$v.subGroup",
"as":"n",
"in":{
"subGroupId":"$$n.subGroupId",
"primarySubGroup":{"$filter":{"input":"$$n.primarySubGroup","as":"mp","cond":{"$eq":["$$mp.primary","Y"]}}}
}
}
}
}
}
}
}}
]