MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

सभी दस्तावेज़ों से किसी सरणी के केवल नेस्टेड दस्तावेज़ों को वापस कैसे करें

आप .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 वह है जिसे आप प्रसंस्करण के लिए सरणी प्रविष्टियों को डिकंस्ट्रक्ट या "डिनॉर्मलाइज़" करने के लिए उपयोग करते हैं। प्रभावी रूप से यह सरणी के प्रत्येक सदस्य के लिए पूरे दस्तावेज़ की एक प्रति बनाता है।

शेष कार्य सरणी में मौजूद "केवल" फ़ील्ड को वापस करने के बारे में है।

हालांकि ऐसा करना कोई बहुत बुद्धिमानी की बात नहीं है। यदि आपका इरादा केवल किसी दस्तावेज़ की एक सरणी में एम्बेड की गई सामग्री को वापस करना है, तो बेहतर होगा कि आप उस सामग्री को एक अलग संग्रह में डाल दें।

यह प्रदर्शन के लिए कहीं बेहतर है, एकत्रीकरण ढांचे के साथ संग्रह से सभी दस्तावेज़ों को अलग करना, केवल उन दस्तावेज़ों को केवल सरणी से सूचीबद्ध करने के लिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB मल्टीकी इंडेक्स और इंडेक्स इंटरसेक्शन बाउंड्स

  2. pymongo.errors.CursorNotFound:कर्सर आईडी '...' सर्वर पर मान्य नहीं है

  3. कठपुतली का उपयोग करके MongoDB परिनियोजन और रखरखाव के लिए एक गाइड:भाग 1

  4. MongoDB में .NET के माध्यम से इंडेक्स कैसे बनाएं?

  5. उच्च उपलब्धता के लिए MongoDB कैसे तैनात करें