Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将mongodb类型从Double或Integer更改为String?_Mongodb - Fatal编程技术网

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

如何将mongodb类型从Double或Integer更改为String?,mongodb,Mongodb,我使用mongoimport将一些csv数据导入mongodb 它基本上正确地创建了类型,但也有一些实例在需要字符串的地方创建了双精度或整数 我尝试了几种技术将这些字段转换为字符串,但都没有效果 以下是我尝试过的: 这会对对象类型(类型=3)产生意外更改: 结果如下: > db.temp.findOne({name: {$type:3}}) { "_id" : ObjectId("541a28ddbf8a2e3ee8439b58"), "name" : {

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

它基本上正确地创建了类型,但也有一些实例在需要字符串的地方创建了双精度或整数

我尝试了几种技术将这些字段转换为字符串,但都没有效果

以下是我尝试过的:

这会对对象类型(类型=3)产生意外更改:

结果如下:

> 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();
});
这没有产生任何变化:

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();
});
这没有产生任何变化:

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();
});
这没有产生任何变化:

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:对象0.22没有方法“tonNumber”

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

如果要存储转换后的数据,则需要
更新
文档,否则更改后的文档将无法保存

db.temp.find({name: {$exists:true}}).forEach( function(x) {
    db.temp.update({_id: x._id}, {$set: {name: x.name.toString()}});
});
至于
toNumber
问题,它不是内置功能。您可能希望改用
parseInt
parseFloat

parseInt("1000");  // output: 1000
将Int转换为str:

db.dbname.find({fieldname: {$exists: true}}).forEach(function(obj) {
obj.fieldname= "" + obj.fieldname;
db.dbname.save(obj); });
我尝试使用这个查询。它对我有用。
我认为这是对mongodb 3.4的支持。最新的一个问题可能是现在的工作。

这个问题以前有人问过。看看这个问题的答案,谢谢。我已经通读了这个问题和其他几个问题的答案。奇怪的是,你提到的问题的前两个答案实际上似乎不起作用。如图所示,最上面的答案将类型转换为Object(type=3),而不是String(type=2)。第二个最流行的答案,没有任何改变。