我正在使用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的上下文中这是否有意义?我应该将版本作为数组保存在与当前项目相同的文档中吗?
答案 0 :(得分:2)
真的,我认为如果您需要类似文档关键功能的版本 - 您可能需要查看CouchDB - 它们具有开箱即用的文档版本,并且使用它们非常容易操作,超小型开发努力(比MonogoDB需要的更少)
具体谈论你的案例,我认为你的解决方案很好,除非你的文件版本数量太大(因为文件有限)。
答案 1 :(得分:1)
在设计MongoDB中的文档结构时,最简单的方法是考虑访问模式和数据位置。
在加载文档时,是否需要每个时间的所有版本?在单独的集合中分离版本更有意义吗? 您还需要考虑更新/插入文档。如果您有两个单独的集合,则很难保证它们之间的一致性(与一个文档/集合中的所有内容相比)。
此外,您没有指定数据的大小以及版本更改的频率。如果文档很大(很多数据和版本),你需要考虑每个文档16MB的限制。
要回答您的问题 - 您提出的结构很有意义,但您需要考虑它如何适合您的应用。