MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongo mengonversi dokumen yang disematkan ke array

Anda masih perlu mengulangi konten, tetapi sebaliknya Anda harus membalas menggunakan operasi massal:

Baik untuk MongoDB 2.6 dan yang lebih baru:

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();

Atau dalam rilis modern MongoDB 3.2 dan yang lebih baru, bulkWrite() metode yang lebih disukai:

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 });

Jadi ketika menulis kembali ke database melalui kursor, maka operasi penulisan massal dengan set "tidak berurutan" adalah cara yang harus dilakukan. Itu hanya satu tulis/tanggapan per kumpulan 1000 permintaan, yang mengurangi banyak overhead, dan "tidak berurutan" berarti bahwa penulisan dapat terjadi secara paralel daripada dalam urutan serial. Semuanya membuatnya lebih cepat.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengumumkan ClusterControl 1.7.1:Dukungan untuk PostgreSQL 11 dan MongoDB 4.0, Pemantauan yang Ditingkatkan

  2. MongoDB $oid vs ObjectId

  3. Cara mengecualikan beberapa bidang dari dokumen

  4. MongoDB $toDouble

  5. Bagaimana cara menambahkan data ke array dalam Skema Mongoose