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

मोंगोडब में एकाधिक ऐरे ऑब्जेक्ट्स को कैसे अपडेट करें

हालांकि मुझे नहीं लगता कि एक अपेक्षित गिनती पर पुनरावृत्ति करना ऐसा करने का "सर्वश्रेष्ठ" तरीका है, यहां मूल रूप से नोड द्वारा कुछ मदद के साथ आप जो करने की कोशिश कर रहे हैं, उसमें सुधार है async प्रवाह नियंत्रण के लिए पुस्तकालय:

  async.waterfall(
    [
      function(callback) {
        collection.aggregate(
          [
            { "$match": { "_id": ObjectId("4d2d8deff4e6c1d71fc29a07") } },
            { "$unwind": "$events" },
            { "$match": { "events.handled.visibile": false } },
            { "$group": {
              "_id": "$_id",
              "count": { "$sum": 1 }
            }}
          ],
          callback
        );
      },

      function(results,callback) {
        console.log(results);
        var result = results[0];

        async.whilst(
          function() { return result.count-- },
          function(callback) {
            collection.update(
              { "_id": result._id, "events.handled.visibile": false },
              { "$set": { "events.$.handled.visibile": true } },
              callback
            )
          },
          callback
        );
      }
    ],
    function(err) {
      if (err) throw err;
      // finished now
    }
  );

तो यहाँ मुख्य बातें यह हैं कि आपका .update() इसके बजाय कथन को "events.handled.visibile": false . की तलाश में होना चाहिए मेल खाता है, और निश्चित रूप से आपको यह सुनिश्चित करने की आवश्यकता है कि संचालन "श्रृंखला में" निष्पादित होता है, अन्यथा कोई वास्तविक गारंटी नहीं है कि आप वास्तव में पिछले .update() से बदली हुई स्थिति में दस्तावेज़ को हथिया रहे हैं। ।

async.whilst प्रवाह नियंत्रण को संभालता है ताकि यह प्रत्येक के पूरा होने की प्रतीक्षा कर सके .update() अगले क्रियान्वित होने तक। जब यह पहला तार्किक कथन होता है true (काउंटर समाप्त) और सभी .update() बयान चलाए जाते हैं तो लूप अंतिम कॉलबैक के लिए जारी होगा।

जहां संभव हो, आपको वास्तव में जिस उत्तर का आप अनुसरण कर रहे हैं में संदर्भित "बल्क" अपडेट ऑपरेशन का उपयोग करना चाहिए। ए> . यह सभी अपडेट भेजता है और एक बार और केवल एक प्रतिक्रिया होती है, इसलिए प्रत्येक ऑपरेशन के पूरा होने की प्रतीक्षा करने का ओवरहेड समाप्त हो जाता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb $लुकअप क्वेरी ऑब्जेक्ट सरणी से कई फ़ील्ड के साथ

  2. बहुत सारे डेटा लॉगिंग, डीबी या फ़ाइल के लिए आर्किटेक्चर?

  3. Data.model.updateItem कोई फ़ंक्शन नहीं है TypeError:Data.model.updateItem कोई फ़ंक्शन नहीं है

  4. MongoDB fsync () का उपयोग क्यों नहीं करता है?

  5. क्या मोंगोडब के साथ django पलायन को अतीत की बात बना देता है?