![]() |
1
140
潜入这个领域的第一个大问题是 “您希望如何存储变更集” ?
我个人的方法是存储差异。因为这些差异的显示实际上是一个特殊的操作,所以我将把这些差异放在一个不同的“历史”集合中。 我将使用不同的集合来节省内存空间。对于简单查询,通常不需要完整的历史记录。因此,通过将历史记录保存在对象之外,您还可以在查询该数据时将其保存在通常访问的内存之外。 为了让我的生活更容易,我会让一个历史文档包含一个时间戳差异的字典。像这样:
为了让我的生活变得简单,我将把我用来访问数据的数据对象(EntityWrapper,随便什么)的这一部分变成现实。通常,这些对象具有某种形式的历史,因此您可以轻松地重写
更新:2015-10 好像现在有 a spec for handling JSON diffs . 这似乎是存储差异/更改的更强大的方法。 |
![]() |
2
30
有一个称为“vermongo”的版本控制方案,它处理了一些在其他回复中没有处理的方面。 其中一个问题是并发更新,另一个问题是删除文档。 Vermongo将完整的文档副本存储在卷影集合中。对于某些用例,这可能会导致过多的开销,但我认为这也简化了许多事情。 |
![]() |
3
19
对于当前版本和所有旧版本,使用单个文档的另一个解决方案是:
获取最新版本:
获取特定版本的依据
仅返回指定字段:
插入新版本: (并防止同时插入/更新)
这个
这样就不需要唯一的索引,但是应用程序逻辑必须注意增加
删除特定版本:
就是这样! (记住每个文档的16MB限制) |
![]() |
4
12
如果你正在寻找一个现成的解决方案- MongoID内置了简单的版本控制 http://mongoid.org/en/mongoid/docs/extras.html#versioning MongoID历史是一个Ruby插件,它提供了一个非常复杂的解决方案,包括审计、撤消和重做。 |
![]() |
5
9
我研究过这个解决方案,它包含数据的已发布、草稿和历史版本:
我在这里进一步解释模型: http://software.danielwatrous.com/representing-revision-data-in-mongodb/ 对于那些可能在 爪哇 ,下面是一个示例: http://software.danielwatrous.com/using-java-to-work-with-versioned-data/ 如果你愿意的话,包括你能输入的所有代码 |
![]() |
6
3
如果您正在使用Mongoose,我发现以下插件是 JSON Patch 格式 |
![]() |
7
2
另一个选择是使用 mongoose-history 插件。
|
![]() |
8
1
我已经为一个Meteor/MongoDB项目使用了下面的包,它工作得很好,主要的优点是它将历史/修订存储在同一个文档的数组中,因此不需要额外的发布或中间件来访问更改历史。它可以支持有限数量的以前版本(例如最近十个版本),它还支持更改串联(因此在特定时期内发生的所有更改都将包含在一个修订中)。 nicklozon/meteor-collection-revisions 另一种声音选择是使用流星Vermongo( here ) |
![]() |
9
-2
尝试使用javers。好的图书馆。 |