文件是这个
{title:"here", lat:123.4512, lng:36.3423, time:"2011-01-02"}
我想要这样的文档
{title:"here", {latlng: {lat:123.4512, lng:36.3423}}, time:"2011-01-02"}
因此,我将通过mongodb控制台尝试此操作。
db.coll.find().forEach(function(u){
u.latlng = {"lat":u.lat, "lng":u.lng};
db.coll.save(u);
db.coll.update(u, {$unset:{"map_x1":1, "map_y1":1}});
})
但是T.T很慢
我认为另一种解决方案
db.coll.find().forEach(function(u){
db.coll.update(u, {{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}});
})
但我不能运行它。因为第一个解决方案仍在运行....
您有像这样的工作有什么快速的解决方案吗?
最佳答案
您的第二个查询已损坏,因为它将覆盖整个文档,请使用$ set:
db.coll.find().forEach(function(u){
db.coll.update(u, {$set:{"latlng" : {"lat":u.lat, "lng":u.lng}}, $unset:{"lat":1, "lng":1}});
})
这将至少是您原始尝试速度的两倍,因为您要在同一时间更新同一文档两次,所以没有必要。
关于mongodb - 如何在MongoDB中更改字段或快速更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6998653/