我正在尝试将类型字符串更改为Integer。以下代码在简单搜索时选择正确的元素,并且代码完美地适用于顶部的字符串元素。
db.providers.find({'assignments.assignment' :
{$elemMatch :
{
as_total_hours :
{$exists : true}}}}).forEach( function(obj) {
obj.as_total_hours = parseInt(obj.as_total_hours);
db.providers.save(obj);
})
以下是该文件的一个示例。
"dev_active_interviews" : 0,
"assignments" : {
"assignment" : [
{
"as_rate" : "$3.89",
"as_from" : "05/2011",
"as_to" : "Present",
"as_total_hours " : "16"
},
{
"as_rate" : "$2.22",
"as_from" : "11/2010",
"as_to" : "Past",
"as_total_hours" : "200"
}
]
}
答案 0 :(得分:3)
您的代码假设find
返回嵌入的赋值对象而不是对象。
更改:
obj.as_total_hours = parseInt(obj.as_total_hours);
db.providers.save(obj);
到
obj.assignments.assignment.forEach(function(obj) {
obj.as_total_hours = parseInt(obj.as_total_hours);
})
db.providers.save(obj);
您还可以将{$exists:true}
更改为{$type: 2}
(或合并它们),以便查询只查找字符串。