Il modo migliore per farlo è abbinare l'elemento dell'array e aggiornarlo individualmente con il $
posizionale operatore utilizzando il Bulk()
API. Non dovresti davvero sprecare il tuo qty
matrice.
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();