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

बच्चे में माता-पिता के संदर्भ के आधार पर एक दस्तावेज़ खोजें

वास्तव में ऐसा करने का "सर्वश्रेष्ठ" तरीका .aggregate() का उपयोग करना है। और $lookup डेटा को "जुड़ने" के लिए और मैच की स्थितियों पर "फ़िल्टर" करने के लिए। यह बहुत प्रभावी है क्योंकि MongoDB वास्तव में यह सब "सर्वर" पर ही करता है, "एकाधिक" प्रश्नों को जारी करने की तुलना में .populate() करता है।

MovieModel.aggregate([
  { "$match": { "m_title": m_title } },
  { "$lookup": {
    "from": RankMovieModel.collection.name,
    "localField": "_id",
    "foreignField": "movie",
    "as": "rankings"
  }}
])

अगर रैंकिंग के "बहुत सारे" हैं, तो आप <का उपयोग करने के लिए सर्वश्रेष्ठ हैं कोड>$अनविंड , जो प्रत्येक संबंधित "रैंकिंग" आइटम के लिए एक दस्तावेज़ तैयार करेगा:

MovieModel.aggregate([
  { "$match": { "m_title": m_title } },
  { "$lookup": {
    "from": RankMovieModel.collection.name,
    "localField": "_id",
    "foreignField": "movie",
    "as": "rankings"
  }},
  { "$unwind": "$rankings" }
])

यहां एक विशेष हैंडलिंग भी है कि कैसे MongoDB 16MB BSON सीमा को भंग करने से बचने के लिए "जुड़ने" दस्तावेजों से निपटता है। तो वास्तव में यह विशेष बात तब होती है जब $unwind सीधे एक $lookup का अनुसरण करता है पाइपलाइन चरण:

    {
        "$lookup" : {
            "from" : "rankmovies",
            "as" : "rankings",
            "localField" : "_id",
            "foreignField" : "movie",
            "unwinding" : {
                "preserveNullAndEmptyArrays" : false
            }
        }
    }

तो $unwind वास्तव में "गायब" होता है और इसके बजाय $लुकअप अपने आप में जैसे कि यह "एक" ऑपरेशन था। इस तरह हम सीधे मूल दस्तावेज़ के भीतर एक "सरणी" नहीं बनाते हैं जिसके कारण कई "संबंधित" वस्तुओं के साथ चरम मामलों में आकार 16MB से अधिक हो जाएगा।

अगर आपके पास एक MongoDB नहीं है जो $lookup ( मोंगोडीबी 3.2 मिनुनम ) तो आप .populate() के साथ "वर्चुअल" का उपयोग कर सकते हैं इसके बजाय (न्यूनतम 4.5.0 नेवला की आवश्यकता है ) लेकिन ध्यान दें कि यह वास्तव में "दो" करता है सर्वर से पूछताछ:

पहले "वर्चुअल" को स्कीमा में जोड़ें:

movieSchema.virtual("rankings",{
  "ref": "Movie",
  "localField": "_id",
  "foreignField": "movie"
});

फिर .populate() के साथ क्वेरी जारी करें :

MovieModel.find({ "m_title": m_title })
  .populate('rankings')
  .exec()



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. पुश और स्लाइस के साथ सरणी अपडेट कर रहा है

  2. रनटाइम त्रुटि:कार्य एक अलग लूप से जुड़ा हुआ है

  3. संग्रह वस्तु PyMongo के साथ प्रतिदेय त्रुटि नहीं है

  4. Php से mongoDB में किसी आईडी द्वारा संदर्भित दस्तावेज़ को कैसे निकालें?

  5. मोंगो सरणी अपडेट करें:गतिशील कुंजी हटाएं