4
我需要更新一個集合中的某些文檔,並將更新文檔的_id
的數組發送到另一個集合。Mongodb - 返回所有更新文檔的_id數組
由於update()
返回更新的項目不是他們的IDS,我想出了以下獲得數組的數:
var docsUpdated = [];
var cursor = myCollection.find(<myQuery>);
cursor.forEach(function(doc) {
myCollection.update({_id : doc._id}, <myUpdate>, function(error, response){
docsUpdated.push(doc._id);
});
});
或者我可以這樣做:
var docsUpdated = myCollection.distinct("_id", <myQuery>);
myCollection.update(<myQuery>, <myUpdate>, {multi : true});
我猜測第二個版本會更快,因爲它只調用數據庫兩次。但是這兩者看起來效率低下 - 沒有多個數據庫調用的情況下還有另一種方法嗎?還是我過分複雜?
後,我搜索一些相關帖子在這裏,似乎你的第二個選擇可能會更好... – zangw
是的我的第二個問題是:如果任何更新失敗(例如,因爲它打破了架構規則) - 那麼_id將在docsUpdated數組中,但是doc不會被更新。 (這隻發生在我身上) – rubie
哇,也許[批量操作](https://docs.mongodb.org/manual/reference/method/Bulk/)可能是你的一個選擇... – zangw