参考 > 资料模型 > 数据模型示例和模式 > 模型特定的应用程序上下文 > 模式版本化的模型数据
数据库模式有时需要更新。例如,可能需要更新用于保存用户联系信息的架构,以包括新的通信方法(例如Twitter或Skype),因为它们变得越来越流行。
您可以使用MongoDB的灵活模式模型(该模式模型支持同一集合中形状不同的文档)来逐步更新集合的模式。在更新模式模型时,“模式版本控制”模式允许您使用版本号跟踪这些更新。您的应用程序代码可以使用版本号来识别和处理形状不同的文档,而无需停机。
要实现Schema Versioning模式,schema_version
请在第一次修改架构时向您的架构添加一个(或类似名称的)字段。使用新架构的文档应带有
schema_version
,2
以表明它们遵守架构的第二次迭代。如果您再次更新架构,请增加schema_version
。
您的应用程序代码可以使用schema_version
或不使用文件来有条件地处理文件。使用最新架构将新信息存储在数据库中。
以下示例对users
集合中的文档的架构进行迭代
。
在此架构的第一次迭代中,记录包括
galactic_id
,name
和phone
字段:
在下一次迭代中,将对架构进行更新以以其他形式包含更多信息:
添加一种schema_version
手段,使应用程序可以识别针对新架构而成形的文档并进行相应的处理。如果文档schema_version
上不存在旧应用程序,则该应用程序仍可以处理。
例如,考虑一个通过查找用户电话号码的应用程序galactic_id
。给予时galactic_id
,应用程序需要查询数据库:
从数据库返回文档后,应用程序将检查文档是否具有schema_version
字段。
schema_version
字段,则应用程序将返回的文档传递给专用函数,该函数phone
从原始模式呈现该
字段。schema_version
字段,则应用程序将检查架构版本。在此示例中,schema_version
is 2
和应用程序将返回的文档传递给呈现新字段contact_method.work
和
contact_method.home
字段的专用函数。通过使用该schema_version
字段,应用程序代码可以通过向代码添加专用的处理函数来支持同一集合中的任意数量的模式迭代。
模式版本化模式非常适合以下情况中的任何一种或组合:
Schema Versioning模式可以帮助您更好地决定相对于传统的表格数据库何时以及如何进行数据迁移。