MongoDB एग्रीगेशन में गहरी नेस्टेड सरणी फ़िल्टरिंग
गहराई से नेस्टेड सरणी संरचनाओं से केवल विशिष्ट मिलान वाले तत्वों को निकालने के लिए, $project स्टेज के भीतर $filter और $map का संयोजन उपयोग करें।
नमूना डेटा: 3-स्तरीय नेस्टिंग
> db.demo342.insertOne({
"Id": "101",
"details1": {
"details2": [{
"details3": [
{"Name": "Mike", "CountryName": "US"},
{"Name": "David", "CountryName": "AUS"},
{"Name": "Bob", "CountryName": "UK"}
]
}]
}
});
{ "acknowledged": true, "insertedId": ObjectId("5e53ef99f8647eb59e5620a9") }
एग्रीगेशन: केवल Name="Bob" वाले details3 तत्व रखें
> db.demo342.aggregate([
{
$project: {
details1: {
details2: {
$filter: {
input: {
$map: {
input: "$details1.details2",
in: {
details3: {
$filter: {
input: "$$this.details3",
cond: {$eq: ["$$this.Name", "Bob"]}
}
}
}
}
},
cond: {$ne: ["$$this.details3", []]}
}
}
}
}
}
]);
परिणाम
{ "details1": { "details2": [ { "details3": [ { "Name": "Bob", "CountryName": "UK" } ] } ] } }
पाइपलाइन: 1) $map बाहरी सरणी पर पुनरावृत्त करता है, 2) आंतरिक $filter details3 सरणी को फ़िल्टर करता है, 3) बाहरी $filter खाली details3 सरणी वाले तत्वों को हटा देता है। यह जटिल नेस्टेड संरचनाओं को आकार देने का उन्नत पैटर्न है।