MongoDB में गहरी नेस्टेड ऑब्जेक्ट से विशिष्ट फील्ड्स प्रोजेक्ट करने के लिए, एग्रीगेशन पाइपलाइन का उपयोग करें: $addFields के साथ $objectToArray, $filter, $arrayToObject।
उदाहरण: गहरी नेस्टेड ऑब्जेक्ट
> db.demo379.insertOne({
"details1" : {
"details2" : {
"details3" : {
"10" : "John", "50" : "Chris", "40" : "David", "30" : "Mike"
}
}
}
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a94f82ae06a1609a00b10") }
दस्तावेज़ देखना
> db.demo379.find().pretty();
आउटपुट: संख्यात्मक कुंजियों वाला नेस्टेड ऑब्जेक्ट।
एग्रीगेशन: कुंजी 35-60 के बीच वाले फील्ड्स प्रोजेक्ट करें
> db.demo379.aggregate([
{ "$addFields": {
"details1.details2.details3": {
"$arrayToObject": {
"$filter": {
"input": { "$objectToArray": "$details1.details2.details3" },
"as": "out",
"cond": {
"$and": [
{ "$gte": [ "$$out.k", "35" ] },
{ "$lte": [ "$$out.k", "60" ] }
]
}
}
}
}
}}
]);
परिणाम
{ "_id" : ObjectId("5e5a94f82ae06a1609a00b10"), "details1" : { "details2" : { "details3" : { "40" : "David", "50" : "Chris" } } } }
चरण व्याख्या
- $objectToArray: नेस्टेड ऑब्जेक्ट को
{k, v}ऑब्जेक्ट्स की सरणी में बदलता है। - $filter: उन तत्वों को रखता है जहां कुंजी (स्ट्रिंग के रूप में) "35" और "60" के बीच है (शब्दकोश क्रम)।
- $arrayToObject: फ़िल्टर्ड सरणी को वापस ऑब्जेक्ट में बदलता है।
- $addFields: मूल पथ पर नेस्टेड ऑब्जेक्ट को ओवरराइट करता है।
नोट
- कुंजी स्ट्रिंग हैं; संख्यात्मक तुलना के लिए, पहले
$toIntके साथ कन्वर्ट करें:{$gte: [{$toInt:"$$out.k"}, 35]}। - यह पैटर्न डायनामिक/अज्ञात कुंजी नामों के लिए उपयोगी है। <
- ज्ञात निश्चित पथ के लिए, सरल प्रोजेक्शन
{ "details1.details2.details3.40": 1 }काम करता है।