虽然您不能使用分隔符来分隔 shell 中的命令以引入原子性,但您可以使用 db.eval。
如果您只使用 shell(您在评论中说过),则可以使用db.eval函数在执行一段 JavaScript 代码时执行数据库范围的锁定。这不是您通常想要做的事情(因为它默认阻止所有写入和读取),但在您在上面描述的情况下(再次,评论),听起来它符合您的需求。
db.eval( function() {
var one = db.cities.find({"asciiname":"Zamin Sukhteh"});
var two = db.cities.find({"asciiname":"Konab-e Vasat"});
// other work ...
});
更新(解决评论):
如果您想在 MongoDB 中进行高效的原子(类似)更新,有几个选项:
- 将所有内容放在一个文档中。这在 MongoDB 中保证是原子的。但是,这通常不适用于复杂的文档模型(或大型文档)。
- 如果文档存在依赖关系,请考虑放置依赖文档的新“版本”,然后,只有在这些都设置好之后,才将链接这些文档的最终文档放入数据库中。如果没有最终的“链接”,旧文档不应该看到新版本。根据数据的使用方式,您可能会非常快速地删除旧版本(如果需要,也可以定期删除)。
- 接受偶尔会出现不匹配并检测它们(然后重新运行查询以获取新数据)。当您遍历文档结构时,您也许可以使用时间戳或版本来识别这些情况。
- 将数据缓存在其他地方作为常见查询的完整结构
- 确定 MongoDB 不适合您的要求。