在MongoDB中对单个文档进行版本控制的不同方法是什么?



如果我向域对象添加属性,这将波及到MongoDB文档。例如,添加一个新的"facebookId"属性到我的用户,将添加一个新的facebookId字段到我的MongoDB文档。

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

我正在考虑在我所有的文档中添加一个"_version"字段。还有其他解决办法吗?

如果您指的是文档模式版本,则有以下几个选项:

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

相关内容

最新更新