2016-09-26 59 views
0

我試圖更新MongoDB集合中每個文檔的字段。更新所有MongoDB文檔中的字段w/Javascript

我添加了來自Mongo shell的字段,但我想將每個字段的值更改爲隨機數。

User.find({}, function(err, items){ 
    if (err){ 
    consele.log('err'); 
    consele.log(err); 
    } 
    items.forEach(function(item){ 
    var time = (Math.floor(Math.random() * (1474893715201 - 1474800000000) + 1474800000000)); 
    item.update({}, {$set:{"lastLogin": time}}, false, true); 
    }); 
}); 

如果我在.forEach循環CONSOLE.LOG(項目),我得到的每一個文件,我所期待的集合中,所以一切都交給那裏似乎是工作。

任何人都可以看到我要去哪裏錯了嗎?

感謝各國人民!

+0

如果你從Node.js的做然後期待更新操作是異步的,並且要記住異步請求在for循環中,這意味着某些文檔可能不會被更新。而是使用批量API進行Promise或異步庫更新。 – chridam

回答

0

Api調用是異步的,你將不得不把它包裝在一個承諾,或異步庫來完成構建更改。

或者你也可以做一個批量發現,通過在蒙哥一個呼叫更新:https://docs.mongodb.com/manual/reference/method/Bulk.find.update/

var bulk = db.items.initializeUnorderedBulkOp(); 
bulk.find({ status: "D" }).update({ $set: { status: "I", points: "0" } }); 
bulk.find({ item: null }).update({ $set: { item: "TBD" } }); 
bulk.execute(); 
0

爲什麼不喜歡

User.find({}, function(err, items){ 
    if (err){ 
    consele.log('err'); 
    consele.log(err); 
    } 
    items.forEach(function(item){ 
    var time = (Math.floor(Math.random() * (1474893715201 - 1474800000000) + 1474800000000)); 
    item.lastLogin = time; 
    User.save(item); // or item.save() based on driver you are using 
    }); 
}); 
相關問題