将Mongodb中NumberLong类型转String类型方法

将Mongodb中Numberlong类型转String类型方法

本文介绍将.CSV文件数据导入到Mongodb数据库后,Numberlong类型数据如何转换为String类型数据。

  • 电脑配置:windows7 64位
  • Mongodb Shell:3.2.6
  • Robomongo 0.9.0-RC7

引言

本意是将其他处得来的数据导入到mongodb中,经过摸索也成功使用.csv文件将其导入,但是int型数据由于过大在mongodb中表现为NumberLong类型,强制转换为int类型会使得数据变错,而我的项目中恰好要将其作为string数据使用,因此转换为string类型最为合适。

导入.csv文件

首先命令窗口,打开mongodb数据库:

将Mongodb中NumberLong类型转String类型方法_第1张图片

使用Robomongo软件查看数据库,可以看到里面包含‘jiaoda’和‘sichuan’两个数据库,其中sichuan’里有两个collections(类似mysql里的表):

将Mongodb中NumberLong类型转String类型方法_第2张图片

此处.csv导入进sichuan’中

准备好.csv文件放在bin目录下,命令窗口bin目录下导入文件:

将Mongodb中NumberLong类型转String类型方法_第3张图片

然后在Robomongo中刷新‘sichuan’数据库,即可看到导入的内容:

将Mongodb中NumberLong类型转String类型方法_第4张图片

可以看到.csv文件顺利导入,其中ID字段是我导入的,_id是由数据库生成的,仔细查看ID字段可以发现,有的是以int形式存在,而有的是NumberLong类型,下面就要开始尝试修改为String类型。

尝试

在这里曾经尝试过修改.csv内的数据格式,不过并没有用,然后在网上知道mongodb是可以通过find(…).forEach(function(x) {})语法来修改collection的field类型,那么我们来尝试一下:

打开bin目录下命令窗口,使用mongo开启db,并显示已有的数据库,从中选择‘sichuan’数据库:

将Mongodb中NumberLong类型转String类型方法_第5张图片

使用网上查找的代码,修改为自己的collections和字段:

将Mongodb中NumberLong类型转String类型方法_第6张图片

db.WeiboID.find({ID:{$exists:true}}).forEach(function(x){
    x.ID=new String(x.ID);//将其转为string类型
    db.WeiboID.save(x);//保存
});

结果如何呢,我们在Robomongo中查看:

将Mongodb中NumberLong类型转String类型方法_第7张图片

可以看到ID字段都被拆分为单个的字符串,甚至连numberlong几个字母都存在,转换失败。

思考

是不是以上方法就完全无法使用呢,事实证明以上方法是可以改变字段类型的,但是却与我们的预期结果相违背,那么我们是否可以考虑换种思路。

由于ID字段数据内容过大不得不显示为NumberLong类型,那么我们可以考虑将其变小,比如除以1000,然后在数据入库前乘以1000,再将其转换为string类型入库,下面我们开始尝试。

步骤

1.将其除以1000:
将Mongodb中NumberLong类型转String类型方法_第8张图片

db.WeiboID.find({ID:{$exists:true}}).forEach(function(x){
    x.ID=x.ID/1000;//将其除以1000
    db.WeiboID.save(x);//保存
});

可以在Robomongo中查看:

将Mongodb中NumberLong类型转String类型方法_第9张图片

结果显示所有数据缩小1000倍,对比第三条记录可以发现原本是NumberLong类型的数据也不存在了。

2.乘以1000的同时转换为string。
将Mongodb中NumberLong类型转String类型方法_第10张图片

db.WeiboID.find({ID:{$exists:true}}).forEach(function(x){
    x.ID=String(x.ID*1000);//将其乘以1000并转为string
    db.WeiboID.save(x);//保存
});

我们再来看看结果:
将Mongodb中NumberLong类型转String类型方法_第11张图片

可以看到所有的数据都被转换为了String类型,over!

你可能感兴趣的:(MongoDB)