2012-04-30 106 views

回答

3

您可以在整个架构上运行更新,删除字段或添加字段并将其设置为计算值(如果这就是您所得到的)。

假设您有一个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 } 
+0

有时候,这是不是让你的应用程序代码检查更容易对于缺失值(这就是我想要的)。 –

+0

感谢您的回答。但这就像将所有数据迁移到新的模式。我们有两个每周发行版,我们支持许多金融产品。由于新功能,这些产品的架构经常发生变化。如果您有超过百万条记录来修改每个版本,我认为这会是一个问题。你有没有遇到过这样的问题? – Jany

+0

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