Nejlepší způsob, jak toho dosáhnout, je spárovat prvek pole a aktualizovat jednotlivě pomocí pozičního $
pomocí operátoru Bulk()
API . Opravdu byste neměli vyhodit své qty
pole.
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();