如何将mongodb类型从Double或Integer更改为String?

时间:2014-09-20 23:23:02

标签: mongodb

我使用mongoimport将一些csv数据导入mongodb。

它主要是正确创建了类型,但是有一些实例在需要字符串的地方创建了双打或整数。

我尝试了几种技术将这些字段转换为字符串无效。

以下是我的尝试:

这对Object类型(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();
});

这产生了一个错误:TypeError:Object 0.22没有方法'toNumber'

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

2 个答案:

答案 0 :(得分:13)

如果您想存储转换后的数据,则需要update文档,否则更改的文档将转到no。

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

答案 1 :(得分:0)

将Int转换为str:

db.dbname.find({fieldname: {$exists: true}}).forEach(function(obj) {
obj.fieldname= "" + obj.fieldname;
db.dbname.save(obj); });

我尝试使用此查询。它为我工作。 我认为这是对mongodb 3.4的支持。在最新的情况下,现在可以工作了。