我有一个包含许多记录的MongoDB集合
{
"_id" : "500cecd97f3b198ba7aceea3",
"startDate" : NumberLong("1343023785531"),
"user_id" : "soggettoDGcfe",
"app_source" : "Diary",
"measuredValue":120,
}
问题在于,由于应用程序的错误,有数百条记录将字段“measuredValue”作为字符串:
{
"_id" : "ab0cecd97f3176eba7aceea3",
"startDate" : NumberLong("1343023785531"),
"user_id" : "soggettoDGcfe",
"app_source" : "Diary",
"measuredValue":"76.0",
}
因此,当我尝试运行某些查询以检查值是否大于某些值时,不会返回记录。通过查询,我能够逐一更正某些记录
db.OBSERVABLEPARAMETER.update({_id:"500cecd97f3b198ba7aceea3"},{$set:{measuredValue:76}});
但他们是数百人! 我怎样才能快速更新所有这些?
答案 0 :(得分:3)
如果所有值都相同(即“76.0”),那么您只需执行以下操作:
db.OBSERVABLEPARAMETER.update({measuredValue:"76.0"},{$set:{measuredValue:76.0}}, {multi:true});
如果值都是不同的字符串,那么您必须找到不正确的字符串:
c = db.OBSERVABLEPARAMETER;
c.find({measuredValue:{$type: 2}}).forEach(function (r){
c.update({_id:r._id},{$set:{measuredValue:Number(r.measuredValue)}});
});
如果您有大量测量但测量值有限,则使用aggregation framework获取所有单个值然后批量更新它们可能会更快。