我有一组具有这种结构的文件:
{ "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, ..."}
或者,或者,是否有更好的方法来模拟所有这些?我们经常会查询所有{"官方":true}文档,所以我认为保持这些信息是有意义的。但也许更好的方法是保留一个单独的集合,指出给定名称的正式版本,例如
{"name": "abc", "official_version": 3}
在这种情况下,只需更新相应的official_version字段即可更改正式版本,但不能保证该版本仍存在于主集合中。此外,查询所有官方文档将需要一个或多个操作,一个用于获取所有名称和官方版本的列表,另一个用于从主要集合中获取实际文档,这看起来不合适。
谢谢!
编辑:正如所指出的那样,没有办法以原子方式更新多个文档(参见MongoDb doc)。在这种情况下,似乎原子地改变官方版本的唯一方法是在单独的文档中跟踪该信息,如我的帖子末尾所述。如果有人能想到任何更好的选择,仍然有兴趣听到更好的选择。感谢