在MongoDB中对单个文档进行版本控制的不同方法有哪些?

时间:2013-03-17 16:49:15

标签: mongodb

如果我向域对象添加一个属性,那么这将会转向MongoDB文档。例如,向我的用户添加新的“facebookId”属性,将在我的MongoDB文档中添加一个新的facebookId字段。

跟踪文档版本有哪些不同的方法?

我正在考虑在我的所有文档中添加“_version”字段。还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您指的是文档架构版本,则选项很少:

  1. 您可以向所有文档添加version字段,或者只添加比原始模式更新的文档(仅在原始模式发生变化时添加它)。鉴于BSON文档中的每个字节都是重要的,我会保持简短,如_v : 1。根据消费平台(如Node.JS,C#,Java等),拥有一个版本可能无法简化反序列化。
  2. 使用通过检测某些数据字段自动检测版本的系统(例如,只有版本2具有facebookId)。对于简单的情况,通过基于字段的存在来改变对象行为,可以在模型类中轻松处理。这就是我之前所做的,它在很多场景中运作良好。
  3. 更新集合中的所有文档以反映新架构。这可以在短暂的系统停机时间内完成所有操作(取决于文档的数量)。
  4. 根据需要更新文档(读取文档时,如果文档与当前架构不匹配,则重写文档)。我在非MongoDB系统中使用过它......它可以很好地工作(但它也应该在MongoDB中运行良好)。
  5. 如果新字段可以为空/不需要,它会使事情变得更容易(特别是#2和#4)。