我知道,當插入/更新/刪除文檔時,MongoDB默認使用異步寫入。我的問題是如果這些更新仍然按順序執行。MongoDB-upsert:火和忘記
假設以下UPSERT查詢,隨後刪除查詢:
db.servers.update({ "server": "abcdef" }, { "$set": { "lastSeen": new Date()}}, /*upsert=*/ true);
db.servers.update({ "server": "uvwxyz" }, { "$set": { "lastSeen": new Date()}}, /*upsert=*/ true);
db.servers.remove({ "lastSeen": { "$lt": new Date(Date.now() - 3600000) } });
如果這些命令對應的是在這些順序執行,然後保證(如果操作成功)被插入第一兩個文件/更新,然後刪除操作將刪除過時的文件?我希望這兩個插入/刪除的文檔都不會被刪除,因爲它們的「lastSeen」值已更新。
我認爲「async-write-thing」只與數據從RAM寫入光盤的時間有關。我認爲它不會影響命令的順序,所以上面的例子總是能工作(如果更新成功),對嗎?
編輯:我使用一個單一的mongod實例。沒有副本集,沒有分片:-)