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

Mongodb . में एग्रीगेट पर अपडेट करें

मैं वास्तव में नहीं सोचता कि एक फीडर क्वेरी के रूप में भी एकत्रीकरण ढांचा यहां उपयोग करने के लिए सही संचालन है। आप जो कुछ भी कर रहे हैं वह सरणी को अलग-अलग दस्तावेज़ों के रूप में "असामान्यीकृत" कर रहा है। वास्तव में कोई आवश्यकता नहीं होनी चाहिए। इसके बजाय बस दस्तावेज़ प्राप्त करें:

var query = {}; // whatever criteria

Users.find(query,"Invitation",function(err,docs) {
    if (err) {
        console.log(err);

    var results = [];        

    async.each(docs,function(doc,callback) {
        async.each(docs.Invitation,function(invite,callback) {
            Users.findOneAndUpdate(
                { "_id": doc._id, "Invitation._id": invite._id },
                { "$set": { "Invitation.$.Accepted": !invite.Accepted } },
                function(err,doc) {
                   results.push( doc );
                   callback(err);
                }
            );
        },callback);
    },function(err) {
        if (err)
            console.log(err);

        console.log(results);
    });    

});

तो आप जो कर रहे हैं उसके जवाब में दस्तावेज़ों की सूची को फिर से शुरू करने में कोई समस्या नहीं है, यह सिर्फ इतना है कि आप सरणी सदस्यों को भी पुन:सक्रिय करना चाहते हैं। किसी भी प्रकार का .update() . जारी करते समय पकड़ में आता है कि आपको जागरूक होने की आवश्यकता है तो एसिंक्रोनस कॉल पूर्ण हो गया है।

इसलिए मैं async.each का उपयोग कर रहा हूं लेकिन आप शायद async.eachLimit चाहते हैं लूपिंग को नियंत्रित करने के लिए। तत्व का मिलान स्थितिगत $ ऑपरेटर, क्वेरी में मिलान किए गए सरणी तत्व के अनुरूप।

यह सिर्फ जावास्क्रिप्ट कोड है, इसलिए बस !invite.accepted के साथ मान को "टॉगल" करें जो इसे उलट देगा। अतिरिक्त मनोरंजन के लिए, संशोधित दस्तावेज़ को से पुश करके "परिणाम" सरणी लौटाएं .findOneAndUpdate()



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB समग्र कुंजी

  2. वसंत मोंगो के साथ साझा करना

  3. मोंगो डीबी अद्यतन क्वेरी प्रदर्शन

  4. मैं जाने में (एमजीओ का उपयोग करके) मोंगो से लौटाए गए मनमानी हैश से कैसे निपटूं?

  5. कैसे सुनिश्चित करने के लिए एक एसिंक्रोनस कॉल नेवला में एक समारोह से लौटने से पहले निष्पादित किया जाता है?