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

मोंगो एम्बेडेड दस्तावेज़ को सरणी में बदलें

आपको अभी भी सामग्री पर पुनरावृति करने की आवश्यकता है, लेकिन इसके बजाय आपको बल्क ऑपरेशंस का उपयोग करके वापस लिखना चाहिए:

MongoDB 2.6 और उच्चतर के लिए:

var bulk = db.collection.initializeUnorderedBulkOp(),
    count = 0;

db.collection.find({ 
   "$where": "return !Array.isArray(this.experience)"
}).forEach(function(doc) {
    bulk.find({ "_id": doc._id }).updateOne({
        "$set": { "experience": [doc.experience["0"]] }
    });
    count++;

    // Write once in 1000 entries
    if ( count % 1000 == 0 ) {
        bulk.execute();    
        bulk = db.collection.initializeUnorderedBulkOp();
    }
})

// Write the remaining
if ( count % 1000 != 0 )
    bulk.execute();

या MongoDB 3.2 और उससे अधिक की आधुनिक रिलीज़ में, bulkWrite() विधि पसंद की जाती है:

var ops = [];

db.collection.find({ 
   "$where": "return !Array.isArray(this.experience)"
}).forEach(function(doc) {
   ops.push({
       "updateOne": {
           "filter": { "_id": doc._id },
           "update": { "$set": { "experience": [doc.experience["0"]] } }
       }
   });

   if ( ops.length == 1000 ) {
       db.collection.bulkWrite(ops,{ "ordered": false })
       ops = [];
   }
})

if ( ops.length > 0 )
    db.collection.bulkWrite(ops,{ "ordered": false });

तो जब एक कर्सर पर डेटाबेस पर वापस लिखते हैं, तो "अनॉर्डर्ड" सेट के साथ बल्क राइट ऑपरेशंस जाने का रास्ता है। यह 1000 अनुरोधों के प्रति बैच में केवल एक लेखन/प्रतिक्रिया है, जो बहुत अधिक ओवरहेड को कम करता है, और "अनियंत्रित" का अर्थ है कि सीरियल क्रम के बजाय समानांतर में लिखा जा सकता है। यह सब इसे तेज़ बनाता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो अद्यतन सरणी तत्व (.NET ड्राइवर 2.0)

  2. त्रैमासिक वार ग्रुप डेट कैसे करें?

  3. MongoDB बनाम MySQL NoSQL - मोंगो बेहतर क्यों है

  4. ऐरे के बिना एंबेडेड दस्तावेज़?

  5. नेवला को उप-दस्तावेज़ सरणी आइटम के लिए _id गुण बनाने से रोकें