2014-09-20 339 views
8

我用mongoimport将一些csv数据导入到mongodb中。如何将MongoDB类型从Double或Integer更改为String?

它主要是正确创建类型,但有一些情况下,在需要字符串的位置创建双精度或整数。

我试过几种技术将这些字段转换为字符串无济于事。

这是我曾尝试:

这产生不希望改变一个对象类型(Type = 3):

db.temp.find({ 'name' : { $type : 16 } }).forEach(function (x) { 
    x.name = new String(x.name); // convert field to string 
    db.temp.save(x); 
}); 

结果是这样的:

> db.temp.findOne({name: {$type:3}}) 
{ 
    "_id" : ObjectId("541a28ddbf8a2e3ee8439b58"), 
    "name" : { 
     "0" : "0", 
     "1" : ".", 
     "2" : "2", 
     "3" : "2" 
    } 
} 

这产生没有变化:

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    x.name = "" + x.name; 
}); 

这产生没有变化:

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    x.name = x.name + ""; 
}); 

这产生没有变化:

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    x.name = "" + x.name + ""; 
}); 

这产生没有变化:

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    x.name = x.name.toString(); 
}); 

这产生一个错误:类型错误:对象0.22没有方法'toNumber'

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    x.name = x.name.toNumber().toString(); 
}); 
+0

此问题已被提问。看看这个['问题']的答案(http://stackoverflow.com/questions/4973095/mongodb-how-to-change-the-type-of-a-field) – 2014-09-21 00:25:09

+0

谢谢。我已经阅读了这个问题的答案和其他几个。奇怪的是,你提到的问题的前2个答案似乎并没有实际工作。如上所示,顶级答案将类型转换为Object(type = 3)而不是String(type = 2)。第二个最受欢迎的答案完全没有改变。 – 2014-09-21 04:32:19

回答

11

如果要存储转换后的数据,则需要update该文档,否则更改后的文档将转到不存在的地方。

db.temp.find({name: {$exists:true}}).forEach(function(x) { 
    db.temp.update({_id: x._id}, {$set: {name: x.name.toString()}}); 
}); 

至于toNumber问题,它不是内置函数。您可能需要使用parseIntparseFloat代替:

parseInt("1000"); // output: 1000 
相关问题