在MongoDB中单独查询;

快速提问。

我有一些更新命令可以在我的MongoDB数据库上运行。 这些发生在用户完成许多任务并希望将所有更新推送到服务器之后。 我将在几个集合中更新几个文档。

如果我想确保这些更新是原子性的,并且没有其他用户同时发出的查询或命令可能会造成干扰,我可以将我的查询分开;

简单示例:

db.cities.find({"asciiname":"Zamin Sukhteh"});db.cities.find({"asciiname":"Konab-e Vasat"})

上述结果会导致两个独立的原子查询吗?


尽管无法使用分隔符来分隔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并不适合您的要求。
  • 链接地址: http://www.djcxy.com/p/61943.html

    上一篇: Separate queries in MongoDB with ;

    下一篇: unable to load main object from bundle.js using cordova