如何以原子方式更新MongoDB中集合中的两个文档

时间:2015-04-28 12:28:38

标签: mongodb

我有一组具有这种结构的文件:

{ "name": "abc", "version": 1, "official": true, "someOtherField": {} }

在此集合中,不能有两个具有相同名称和版本组合的文档(索引会处理该文档)。此外,对于给定的名称,最多可以有1个官方成立的文档。

假设我的收藏包含以下文件:

{"name": "abc", "version": 1, "official": false, ...}
{"name": "abc", "version": 2, "official": true, ..."}
{"name": "abc", "version": 3, "official": false, ..."}
  1. 我想制作" abc"的第3版。官方的。我如何自动更新集合,以便版本2的官方设置为false,版本3的官方设置为true?
  2. 插入新版本时如何进行上述操作?例如,是否可以插入一个官方为true的新版本4文档,同时将当前正式版本设置为false?
  3. 或者,或者,是否有更好的方法来模拟所有这些?我们经常会查询所有{"官方":true}文档,所以我认为保持这些信息是有意义的。但也许更好的方法是保留一个单独的集合,指出给定名称的正式版本,例如

    {"name": "abc", "official_version": 3}
    

    在这种情况下,只需更新相应的official_version字段即可更改正式版本,但不能保证该版本仍存在于主集合中。此外,查询所有官方文档将需要一个或多个操作,一个用于获取所有名称和官方版本的列表,另一个用于从主要集合中获取实际文档,这看起来不合适。

    谢谢!

    编辑:正如所指出的那样,没有办法以原子方式更新多个文档(参见MongoDb doc)。在这种情况下,似乎原子地改变官方版本的唯一方法是在单独的文档中跟踪该信息,如我的帖子末尾所述。如果有人能想到任何更好的选择,仍然有兴趣听到更好的选择。感谢

0 个答案:

没有答案