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

Mongodb foreach cho bộ sưu tập lồng nhau để cập nhật / sao chép tài liệu sang bộ sưu tập khác

Nếu bạn định cập nhật toàn bộ bộ sưu tập thì limit trên con trỏ của bạn trong mã hiện tại của bạn là không cần thiết. Lỗi bạn gặp phải là do mappingData trong products bộ sưu tập không có trường tài liệu con được gọi là array . Từ ví dụ của bạn trong câu hỏi, chỉ có title trường phụ tài liệu có sẵn và đó là trường bạn muốn.

Tùy thuộc vào kích thước của bộ sưu tập sản phẩm, việc chèn các tài liệu đã chuyển đổi vào bộ sưu tập mới có thể ảnh hưởng đến hoạt động của bạn. Bạn có thể tránh hiệu suất chèn chậm bằng cách sử dụng API chèn hàng loạt giúp hợp lý hóa các hoạt động chèn của bạn bằng cách gửi hàng loạt và tốt hơn nữa, nó cung cấp cho bạn phản hồi thực tế về những gì đã thành công và những gì không thành công.

Thao tác API chèn hàng loạt sau sẽ chèn vào newcollection cấu trúc dữ liệu mong muốn nơi các tài liệu mới được tạo bên trong con trỏ bộ sưu tập sản phẩm forEach() vòng lặp, sử dụng ký hiệu dấu ngoặc để tạo các thuộc tính mới. Trong phần chèn hàng loạt, bạn sẽ gửi các hoạt động đến máy chủ theo lô 1000, điều này mang lại cho bạn hiệu suất tốt hơn vì bạn không gửi mọi yêu cầu đến máy chủ, chỉ một lần trong mỗi 1000 yêu cầu:

var bulk = db.newcollection.initializeUnorderedBulkOp(),   
    counter = 0;

db.products.find().forEach(function(doc) { 
    var document = {};
    if (doc.mappingData.title) document["title"] = doc[doc.mappingData.title];
    document["Manufacturer"] = doc.Manufacture;
    bulk.insert(document);
    counter++;
    if (counter % 1000 == 0) {
        bulk.execute();
        bulk = db.newcollection.initializeUnorderedBulkOp();
    }
});

if (counter % 1000 != 0) { bulk.execute(); }

Với ví dụ trên, phản hồi bạn nhận được từ hoạt động API hàng loạt sẽ ở định dạng sau:

BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})

Truy vấn bộ sưu tập mới db.newcollection.find() sẽ mang lại:

/* 0 */
{
    "_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
    "title" : "Toshiba Satellite Pro 4600 PIII800",
    "Manufacturer" : "Toshiba"
}

/* 1 */
{
    "_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
    "title" : "Apple Ihone",
    "Manufacturer" : undefined
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. truy vấn trong mongo Shell đưa ra thuộc tính SyntaxError:thiếu:sau

  2. Lập trình cơ sở dữ liệu Python với MongoDB cho người mới bắt đầu

  3. Cách chèn nhiều tài liệu cùng lúc trong MongoDB thông qua Java

  4. MongoDb C # đã nhập Tổng hợp với Thư giãn nhóm và Dự án

  5. node.js MongoDB truy vấn không trả về kết quả