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

在MongoDB中对单个文档进行版本控制的不同方法有哪些?,mongodb,Mongodb,如果我向域对象添加属性,这将波及到MongoDB文档。例如,向我的用户添加新的“facebookId”属性将向我的MongoDB文档添加新的facebookId字段 跟踪文档版本的不同方法有哪些 我正在考虑在我的所有文档中添加一个“\u version”字段。还有其他解决方案吗?如果您指的是文档架构版本,那么有几个选项: 您可以将version字段添加到所有文档或仅添加到比原始架构更新的文档中(仅在原始架构发生更改时添加)。考虑到BSON文档中的每个字节都有计数,我会让它保持简短,比如\u v:

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

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


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

如果您指的是文档架构版本,那么有几个选项:

  • 您可以将
    version
    字段添加到所有文档或仅添加到比原始架构更新的文档中(仅在原始架构发生更改时添加)。考虑到BSON文档中的每个字节都有计数,我会让它保持简短,比如
    \u v:1
    。根据消费平台(如Node.JS、C#、Java等),拥有一个版本可能不会使反序列化变得简单
  • 使用通过检测特定数据字段自动检测版本的系统(例如,只有版本
    2
    具有
    facebook id
    )。对于简单的情况,通过基于字段的存在更改对象行为,可以在模型类中轻松处理此问题。这是我以前做过的,它在许多场景中都很有效
  • 更新集合中的所有文档以反映新架构。这可以在短暂的系统停机时间内一次性完成(取决于文档数量)
  • 根据需要,更新文档(在读取文档时,如果与当前架构不匹配,请重写文档)。我在非MongoDB系统中使用过这个。。。它可以很好地工作(但在MongoDB中也应该很好地工作) 如果新字段可以为null/non-required,这会使事情变得更容易(特别是#2和#4)