आप .aggregate()
. का इस्तेमाल करके ऐसा कर सकते हैं और मुख्य रूप से $unwind
पाइपलाइन ऑपरेटर:
आधुनिक MongoDB 3.4 और इसके बाद के संस्करण में आप $replaceRoot
के साथ मिलकर उपयोग कर सकते हैं
Model.aggregate([
{ "$unwind": "$books" },
{ "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {
})
पुराने संस्करणों में आप $project
. के साथ सभी फ़ील्ड निर्दिष्ट करते हैं :
Model.aggregate([
{ "$unwind": "$books" },
{ "$project": {
"_id": "$books._id",
"pages": "$books.pages",
"title": "$books.title"
}}
],function(err,results) {
})
तो $unwind
वह है जिसे आप प्रसंस्करण के लिए सरणी प्रविष्टियों को डिकंस्ट्रक्ट या "डिनॉर्मलाइज़" करने के लिए उपयोग करते हैं। प्रभावी रूप से यह सरणी के प्रत्येक सदस्य के लिए पूरे दस्तावेज़ की एक प्रति बनाता है।
शेष कार्य सरणी में मौजूद "केवल" फ़ील्ड को वापस करने के बारे में है।
हालांकि ऐसा करना कोई बहुत बुद्धिमानी की बात नहीं है। यदि आपका इरादा केवल किसी दस्तावेज़ की एक सरणी में एम्बेड की गई सामग्री को वापस करना है, तो बेहतर होगा कि आप उस सामग्री को एक अलग संग्रह में डाल दें।
यह प्रदर्शन के लिए कहीं बेहतर है, एकत्रीकरण ढांचे के साथ संग्रह से सभी दस्तावेज़ों को अलग करना, केवल उन दस्तावेज़ों को केवल सरणी से सूचीबद्ध करने के लिए।