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