我知道 MongoDB 在插入/更新/删除文档时默认使用异步写入。我的问题是这些更新是否仍按顺序执行。
让我们假设以下 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”值已更新。
我认为“异步写入”只与数据从 RAM 写入磁盘的时间有关。我认为它不会影响命令的顺序,因此上面的示例将始终有效(如果更新成功),对吧?
编辑:我使用单个 mongod 实例。没有副本集,没有分片:-)