如何在迭代期間(使用遊標)刪除文檔?查找期間從集合中刪除文檔
db.users.find().forEach(function(myDoc) {
print("user: " + myDoc.name);
// now I'm done with it
myDoc.remove(); // <-- this doesn't work
});
有沒有辦法做到這一點,而無需做單獨的搜索?
db.users.find().forEach(function(myDoc) {
print("user: " + myDoc.name);
// now I'm done with it
db.users.findOneAndDelete(myDoc); // <-- this does work
});
雖然後面的工作,似乎在已經擁有該文件後進行搜索會顯着減慢進程。 (我錯了嗎?)
這不是一個好主意,因爲您需要爲每個文檔執行'db.collection.deleteOne(myDoc)'。我建議你檢索所有想要刪除的文件的_id,並在完成時使用'db.collection.deleteMany()'。 – styvane
我擔心的是缺乏原子性,我正在建立一個要求,在任何時候機器都會關閉。我擔心的是,在任何時候我在許多文檔上進行處理並且不刪除「直到所有更新完成後,我都會得到很多重複文件。偶爾複製單個文檔在合理範圍內。 – Daniel