नेस्टेड ऐरे को फ़िल्टर करने के लिए $filter, $cond, $map और $anyElementTrue का संयोजन उपयोग करें।
डेमो डेटा
db.demo725.insertOne({
"details": {
"userMessages": [
{ "Messages": [ { "Message": "Hello" }, { "Message": "How" }, { "Message": "are" } ] },
{ "Messages": [ { "Message": "Good" }, { "Message": "Bye" } ] },
{ "Messages": [ { "Message": "Hello" }, { "Message": "Bye" } ] }
]
}
});
फ़िल्टर क्वेरी
केवल उन्हीं userMessages को रखें जिनमें कम से कम एक "Hello" मैसेज हो:
db.demo725.aggregate([
{
$addFields: {
"details.userMessages": {
$filter: {
input: "$details.userMessages",
as: "out",
cond: {
$anyElementTrue: {
$map: {
input: "$$out.Messages",
in: { $gte: [ { $indexOfBytes: [ "$$this.Message", "Hello" ] }, 0 ] }
}
}
}
}
}
}
}
]).pretty()
परिणाम
{
"_id" : ObjectId("5eab16cd43417811278f5893"),
"details" : {
"userMessages" : [
{ "Messages" : [ { "Message" : "Hello" }, { "Message" : "How" }, { "Message" : "are" } ] },
{ "Messages" : [ { "Message" : "Hello" }, { "Message" : "Bye" } ] }
]
}
}
दूसरा एलिमेंट ("Good", "Bye") हटा दिया गया क्योंकि इसमें "Hello" नहीं था।