本文為NoSQL數(shù)據(jù)模型設(shè)計(jì)系列的一部分奔滑。
此模式使用版本號(hào)記錄文檔結(jié)構(gòu)的變動(dòng),方便應(yīng)用程序針對(duì)不同版本的文檔進(jìn)行不同操作。
增加schema_version字段在文檔中漾唉,并在第一次修改結(jié)構(gòu)時(shí)炬称,給其賦值2伞广。以后每次結(jié)構(gòu)變動(dòng),同時(shí)增加這個(gè)字段疼电。應(yīng)用程序讀取schema_version字段嚼锄,根據(jù)它的值做相應(yīng)的操作。
例如下面的user文檔初始版本為
// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Anakin Skywalker",
"phone": "503-555-0000",
}
增加更多字段蔽豺,同時(shí)引入schema_version字段
// users collection
{
"_id": "<ObjectId>",
"galactic_id": 123,
"name": "Darth Vader",
"contact_method": {
"work": "503-555-0210",
"home": "503-555-0220",
"twitter": "@realdarthvader",
"skype": "AlwaysWithYou"
},
"schema_version": "2"
}
應(yīng)用程序判斷schema_version是否存在区丑,如果不存在,通過phone字段獲取電話修陡。否則沧侥,則通過contract_method.work和contract_method.home獲取電話。
此模式可用于下列場(chǎng)景
- 系統(tǒng)不允許停機(jī)
- 更新文檔結(jié)構(gòu)需要耗費(fèi)大量時(shí)間
- 不強(qiáng)制更新到最新結(jié)構(gòu)
完整內(nèi)容請(qǐng)查看NoSQL數(shù)據(jù)模型設(shè)計(jì)系列