यदि आप लौटने के लिए केवल एक सरणी के कुछ क्षेत्रों का चयन करना चाहते हैं तो आप दस्तावेज़ को "पुनर् आकार देने" के बारे में बात कर रहे हैं। "मूल" फ़ील्ड चयन से परे किसी भी चीज़ के लिए, इसका अर्थ है .aggregate()
के बजाय विधि के रूप में .find()
।
तो यहां दो आवश्यकताएं हैं $filter
सरणी सामग्री पर "मिलान" और वापसी, साथ ही साथ $map
वास्तविक "फ़ील्ड टू रिटर्न" सरणी से ही:
User.aggregate([
{ "$match": { "children.name": "def" } },
{ "$project": {
"name": 1,
"children": {
"$map": {
"input": {
"$filter": {
"input": "$children",
"as": "c",
"cond": { "$eq": [ "$$c.name", "def" ] }
}
},
"as": "c",
"in": {
"age": "$$c.age",
"height": "$$c.height"
}
}
}
}}
])
यहां $filter
सरणी की सामग्री को केवल शर्त से मेल खाने वाले लोगों तक कम करने के लिए उपयोग किया जाता है। वही होने के नाते जिनके पास समान "name"
. है मूल्य के रूप में संपत्ति "def"
. इसके बाद इसे "input"
. के रूप में पास किया जाता है पैरामीटर के लिए$map
।
$map
ऑपरेटर ठीक वैसे ही काम करता है जैसे यह अन्य भाषा समकक्षों में है कि यह आपके द्वारा "in"
में निर्दिष्ट कुछ के अनुसार कुछ वापस करने के लिए "सरणी को दोबारा बदलता है" पैरामीटर। तो यहां हम वास्तव में केवल गुणों को स्पष्ट रूप से नाम देते हैं और वर्तमान सरणी तत्व को संसाधित करने के लिए वहां परिवर्तनीय असाइनमेंट का उपयोग करते हैं ताकि ये "नई" सरणी सामग्री के रूप में वापस आ जाएं।
समग्र परिणाम एक सरणी है, जिसमें शामिल हैं:
- बस निर्दिष्ट शर्तों से मेल खाने वाले आइटम।
- बस वे फ़ील्ड जिन्हें वापस करने के लिए निर्दिष्ट किया गया था।