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

mongoDB वस्तुओं के नेस्टेड सरणी पर कुल लुकअप

आप नीचे एकत्रीकरण पाइपलाइन का उपयोग कर सकते हैं।

एजेंट को पॉप्युलेट करने के लिए $लुकअप के बाद $reduce और $concatArrays सभी क्लाइंट आईडी एकत्र करने के लिए और क्लाइंट विवरण प्राप्त करने के लिए $लुकअप।

$addFields मिशन सरणी को पुनरावृत्त करने के लिए $map के साथ और प्रत्येक क्लाइंट के लिए क्लाइंट आईडी द्वारा पिछले चरण से क्लाइंट जानकारी को मैप करें और अन्य फ़ील्ड रखने के लिए $mergeObjects। अतिरिक्त क्षेत्रों को हटाने के लिए $प्रोजेक्ट चरण।

मोंगो डीबी 3.6 और इसके बाद के संस्करण

Model.aggregate([
 {"$lookup":{
  "from":"agents",
  "localField":"agent",
  "foreignField":"_id",
  "as":"agent"
 }},
 {"$addFields":{"agent":{"$arrayElemAt":["$agent",0]}}},
 {"$addFields":{
   "client_ids":{
     "$reduce":{
       "input":"$missions",
       "initialValue":[],
       "in": {"$concatArrays":["$$value","$$this.clients.client"]}
     }
   }
 }},
 {"$lookup":{
   "from":"clients",
   "localField":"client_ids",
   "foreignField":"_id",
   "as":"client_info"
 }},
 {"$addFields":{
   "missions":{
     "$map":{
       "input":"$missions",
       "in":{
         "$mergeObjects":[
           "$$this",
           {"clients":{"$map":{
             "input":"$$this.clients",
             "in":{"$mergeObjects":[
               "$$this",
              {"client":{"$arrayElemAt":[
                "$client_info",
                {"$indexOfArray":["$client_ids","$$this._id"]}
              ]}}
            ]}
           }}}
         ]
       }
     }
   }
 }},
 {"$project":{"client_ids":0,"client_info":0}}
])

मोंगो डीबी 3.6 से कम

एजेंट को पॉप्युलेट करने के लिए $लुकअप के बाद क्लाइंट तक पहुंचने के लिए $अनविंड करें और क्लाइंट विवरण प्राप्त करने के लिए देखें। आबादी वाले मानों के साथ मूल संरचना में वापस लाने के लिए $group के साथ रिवाइंड करें।

Model.aggregate([
 {"$lookup":{
  "from":"agents",
  "localField":"agent",
  "foreignField":"_id",
  "as":"agent"
 }},
 {"$addFields":{"agent":{"$arrayElemAt":["$agent",0]}}},
 {"$unwind":"$missions"},
 {"$unwind":"$missions.clients"},
 {"$lookup":{
   "from":"clients",
   "localField":"missions.clients.client",
   "foreignField":"_id",
   "as":"missions.clients.client"
 }},
 {"$addFields":{"missions.clients.client":{"$arrayElemAt":["$missions.clients.client",0]}}},
 {"$group":{
   "_id":{"_id":"$_id","mission_id":"$missions._id"},
   "agent":{"$first":"$agent"},
   "title":{"$first":"$missions.title"},
   "clients":{"$push":"$missions.clients"}
 }},
 {"$group":{
   "_id":"$_id._id",
   "agent":{"$first":"$agent"},
   "missions":{
     "$push":{
       "_id":"$_id.mission_id",
       "title":"$title",
       "clients":"$clients"
      }
    }
 }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कैसे हर आधी रात को स्वचालित रूप से एक MongoDB संग्रह अद्यतन करने के लिए?

  2. PHP MongoDB $in/$or . का उपयोग करके कई दस्तावेज़ अपडेट करता है

  3. मैं कैसे पता लगा सकता हूं कि एक मोंगोडब सीरिएलाइज़र पहले से पंजीकृत है या नहीं?

  4. मोंगो अद्यतन सरणी तत्व (.NET ड्राइवर 2.0)

  5. यूनिट परीक्षण के लिए मोंगोडब मॉकअप सर्वर को कॉन्फ़िगर और उपयोग करें