1
如何處理Mongo數據庫中的模式更改在重構之後說你改變你的對象模式設計並且影響文檔模式。有沒有辦法更新文檔模式?Mongo DB:對象模式更改對文檔設計的影響
如何處理Mongo數據庫中的模式更改在重構之後說你改變你的對象模式設計並且影響文檔模式。有沒有辦法更新文檔模式?Mongo DB:對象模式更改對文檔設計的影響
您可以在整個架構上運行更新,刪除字段或添加字段並將其設置爲計算值(如果這就是您所得到的)。
假設您有一個X字段,並要添加應被設置爲x/2 AY場,你可以做這樣的事情:
PRIMARY> db.test.insert({x:15});
PRIMARY> db.test.insert({x:30});
PRIMARY> db.test.insert({x:50});
PRIMARY> db.test.find();
{ "_id" : ObjectId("4f9df1ebed2b924eedb8cad9"), "x" : 15 }
{ "_id" : ObjectId("4f9df1eeed2b924eedb8cada"), "x" : 30 }
{ "_id" : ObjectId("4f9df1f1ed2b924eedb8cadb"), "x" : 50 }
PRIMARY> db.test.find().forEach(function(doc) {
doc.y = doc.x/2;
db.test.save(doc);
});
PRIMARY> db.test.find();
{ "_id" : ObjectId("4f9df1ebed2b924eedb8cad9"), "x" : 15, "y" : 7.5 }
{ "_id" : ObjectId("4f9df1eeed2b924eedb8cada"), "x" : 30, "y" : 15 }
{ "_id" : ObjectId("4f9df1f1ed2b924eedb8cadb"), "x" : 50, "y" : 25 }
有時候,這是不是讓你的應用程序代碼檢查更容易對於缺失值(這就是我想要的)。 –
感謝您的回答。但這就像將所有數據遷移到新的模式。我們有兩個每週發行版,我們支持許多金融產品。由於新功能,這些產品的架構經常發生變化。如果您有超過百萬條記錄來修改每個版本,我認爲這會是一個問題。你有沒有遇到過這樣的問題? – Jany
你關心那些舊記錄的數據嗎?如果是這樣,你可能想要這樣做。如果您不關心這些字段中的數據,則可以讓代碼檢查其存在情況(並且在將數據帶到應用程序時懶惰地忽略缺少這些值的記錄,或者應用計算值或默認值)。你有具體的例子嗎? –