从MongoDB字段中删除引号

时间:2013-05-27 14:30:26

标签: mongodb numbers quotes

我有一个包含许多记录的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}});

但他们是数百人! 我怎样才能快速更新所有这些?

1 个答案:

答案 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获取所有单个值然后批量更新它们可能会更快。