MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo konwertuje osadzony dokument na tablicę

Nadal musisz iterować po treści, ale zamiast tego powinieneś odpisać za pomocą operacji zbiorczych:

Albo dla MongoDB 2.6 i nowszych:

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

Lub we współczesnych wydaniach MongoDB 3.2 i nowszych, bulkWrite() preferowana jest metoda:

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

Tak więc podczas zapisywania z powrotem do bazy danych nad kursorem najlepszym rozwiązaniem są operacje zapisu zbiorczego z ustawioną opcją „nieuporządkowana”. Jest to tylko jeden zapis/odpowiedź na partię 1000 żądań, co zmniejsza duże obciążenie, a „nieuporządkowany” oznacza, że ​​zapisy mogą odbywać się równolegle, a nie w kolejności szeregowej. To wszystko przyspiesza.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor zwraca nieprawidłowy ciąg znaków szesnastkowych podczas próby utworzenia ObjectID?

  2. Importowanie typu danych za pomocą mongoimport

  3. Znajdź dokumenty w MongoDB, których pole tablicy jest podzbiorem tablicy zapytań

  4. MongoDB - Zapytania w zakresie godzin

  5. Jak uniknąć ostrzeżenia transparent_hugepage/defrag z mongodb?