MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongo chuyển đổi tài liệu nhúng sang mảng

Bạn vẫn cần phải lặp lại nội dung, nhưng thay vào đó, bạn nên viết lại bằng các thao tác hàng loạt:

Đối với MongoDB 2.6 trở lên:

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

Hoặc trong các phiên bản hiện đại của MongoDB 3.2 trở lên, bulkWrite() phương pháp được ưu tiên:

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

Vì vậy, khi ghi trở lại cơ sở dữ liệu qua con trỏ, thì các hoạt động ghi hàng loạt với tập hợp "không có thứ tự" là cách nên làm. Nó chỉ có một lần ghi / phản hồi cho mỗi lô 1000 yêu cầu, điều này làm giảm rất nhiều chi phí và "không có thứ tự" có nghĩa là việc ghi có thể xảy ra song song chứ không phải theo thứ tự nối tiếp. Tất cả đều làm cho nó nhanh hơn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhận được kết quả $ nhóm với số lượng nhóm

  2. MongoDB $ toUpper

  3. Bắt MongoDB trên Linux để nghe các kết nối từ xa

  4. Cài đặt MongoDB Community Edition 4.0 trên Linux

  5. 'Trường yêu cầu một loại bean không thể tìm thấy.' error Spring Restful API sử dụng mongodb