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

3 स्तरों के साथ MongoDB नेस्टेड लुकअप

आपकी 'समस्याओं' का कारण एकत्रीकरण का दूसरा चरण है - { $unwind: "$address" } . यह _id: 4 . के साथ पार्टी का रिकॉर्ड हटा देता है (क्योंकि इसका पता सरणी खाली है, जैसा कि आप उल्लेख करते हैं) और पार्टियों के लिए दो रिकॉर्ड तैयार करता है _id: 1 और _id: 5 (क्योंकि उनमें से प्रत्येक के दो पते हैं)।

  • पतों के बिना पार्टियों को हटाने से रोकने के लिए आपको preserveNullAndEmptyArrays सेट करना चाहिए $unwind . का विकल्प चरण से true

  • पार्टियों के अलग-अलग पतों की नकल रोकने के लिए आपको $group . जोड़ना चाहिए आपकी पाइपलाइन के लिए एकत्रीकरण चरण। साथ ही, $project . का उपयोग करें $filter . के साथ चरण आउटपुट में खाली पता रिकॉर्ड को बाहर करने के लिए ऑपरेटर।

db.party.aggregate([{
  $lookup: {
    from: "address",
    localField: "_id",
    foreignField: "party_id",
    as: "address"
  }
}, {
  $unwind: {
    path: "$address",
    preserveNullAndEmptyArrays: true
  }
}, {
  $lookup: {
    from: "addressComment",
    localField: "address._id",
    foreignField: "address_id",
    as: "address.addressComment",
  }
}, {
  $group: {
    _id : "$_id",
    name: { $first: "$name" },
    address: { $push: "$address" }
  }
}, {
  $project: {
    _id: 1,
    name: 1,
    address: {
      $filter: { input: "$address", as: "a", cond: { $ifNull: ["$$a._id", false] } }
    } 
  }
}]);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. किसी दस्तावेज़ में किसी सरणी को अपडेट करते समय, MongoDB और C# में $push अपडेट संशोधक का उपयोग कैसे करें

  2. नेवला खुला कनेक्शन खोलने की कोशिश कर रहा है

  3. MongoRegex (MongoDB C# ड्राइवर) का उपयोग कैसे करें

  4. केवल मोंगोडब कुल में नवीनतम उप-दस्तावेज़ के साथ दस्तावेज़ लौटाएं

  5. MongoDB में एक विशिष्ट नाम के साथ एक इंडेक्स कैसे बनाएं?