これを行う最良の方法は、配列要素を照合し、位置 $
で個別に更新することです。 Bulk()
を使用する演算子 API。あなたは本当にあなたのqty
を吹き飛ばすべきではありません 配列。
var bulk = db.mycollection.initializeOrderedBulkOp(),
count = 0;
db.mycollection.find({ "code" : "efg" }).forEach(function(doc){
var qty = doc["qty"];
for (var idx = 0; idx < qty.length; idx++){
bulk.find({
"_id": doc._id,
"qty": { "$elemMatch": { "num": qty[idx]["num"]}}
}).update({ "$set": { "qty.$.num": 0 }})
}
count++;
if (count % 200 == 0) {
// Execute per 200 operations and re-init.
bulk.execute();
bulk = db.mycollection.initializeOrderedBulkOp();
}
})
// Clean up queues
if (count % 200 != 0)
bulk.execute();