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
你关心那些旧记录的数据吗?如果是这样,你可能想要这样做。如果您不关心这些字段中的数据,则可以让代码检查其存在情况(并且在将数据带到应用程序时懒惰地忽略缺少这些值的记录,或者应用计算值或默认值)。你有具体的例子吗? –