Bạn có thể sử dụng .aggregate()
phương thức đến $project
tài liệu của bạn và trả lại $size
của mảng các mục. Sau đó, bạn sẽ cần lặp lại kết quả tổng hợp của mình bằng cách sử dụng .forEach
vòng lặp và $set
trường itemTotal cho tài liệu của bạn bằng cách sử dụng "Bulk"
hoạt động để đạt hiệu quả tối đa.
var bulkOp = db.myDocument.initializeUnorderedBulkOp();
var count = 0;
db.myDocument.aggregate([
{ "$match": {
"itemsTotal": { "$exists": false } ,
"items": { "$exists": true }
}},
{ "$project": { "itemsTotal": { "$size": "$items" } } }
]).forEach(function(doc) {
bulkOp.find({ "_id": doc._id }).updateOne({
"$set": { "itemsTotal": doc.itemsTotal }
});
count++;
if (count % 200 === 0) {
// Execute per 200 operations and re-init
bulkOp.execute();
bulkOp = db.myDocument.initializeUnorderedBulkOp();
}
})
// Clean up queues
if (count > 0) {
bulkOp.execute();
}