具有草稿版本的Mongo文档版本数组

时间:2013-11-04 13:47:46

标签: mongodb

我正在使用MongoDB处理类似CMS的系统。每个项目都要进行版本控制,并且还应该有草稿版本。大多数时候我们只对当前发布的版本感兴趣。

所以,我一直在考虑:

{
   _id: "42",
   current: {
     name: "item1",
     detail: "baz"
   },
   draft: {
     name: "item1",
     detail: "draft stuff"
   },
   versions: [
                {
                  version: "1",
                  name: "item1"
                  detail: "foo"
                },
                {
                  version: "2",
                  name: "item1"
                  detail: "bar"
                }
              ]
 }

新电流的创建将通过' draft'首先,在发布阶段,它将取代当前和旧的电流将转移到版本数组。同样,通过制作草稿副本,可以回滚到旧版本。

在MongoDB的上下文中这是否有意义?我应该将版本作为数组保存在与当前项目相同的文档中吗?

2 个答案:

答案 0 :(得分:2)

真的,我认为如果您需要类似文档关键功能的版本 - 您可能需要查看CouchDB - 它们具有开箱即用的文档版本,并且使用它们非常容易操作,超小型开发努力(比MonogoDB需要的更少)

具体谈论你的案例,我认为你的解决方案很好,除非你的文件版本数量太大(因为文件有限)。

答案 1 :(得分:1)

在设计MongoDB中的文档结构时,最简单的方法是考虑访问模式和数据位置。

在加载文档时,是否需要每个时间的所有版本?在单独的集合中分离版本更有意义吗? 您还需要考虑更新/插入文档。如果您有两个单独的集合,则很难保证它们之间的一致性(与一个文档/集合中的所有内容相比)。

此外,您没有指定数据的大小以及版本更改的频率。如果文档很大(很多数据和版本),你需要考虑每个文档16MB的限制。

要回答您的问题 - 您提出的结构很有意义,但您需要考虑它如何适合您的应用。