Mongodb 字段类型转换
2015-10-19 11:42
489 查看
原文传送门
最近一些项目由于历史原因,字段类型存储混乱,比如一个collection里modifedDate列,有的存的是ISODate类型,有的是NumberLong时间戳,这在Mongodb中是严重不推荐的,需要转换成统一的。Mongodb并不提供Alter table这样的语句或者工具,只能写程序转。
Mongodb的客户端是js写的,其实用js写脚本就可以实现。
以上面的例子来说,要将ISODate类型全都转换为NumberLong时间戳:
1、查询多少记录是ISODate类型
①、$type
db.table_name.find({modifedDate:{$type:9}}).count()
其中的9是Mongodb定义的BSON Date类型对应的数字。下面这张表是BSON TYPE及他们对应的数字。
②、forEach函数和instanceof
count=0;
db.table_name.find().forEach(function(x){if(x.modifedDate instanceof Date){count++}});
print(count);
2、修改类型
使用forEach函数
db.table_name.find({modifedDate:{$type:9}}).forEach(function(x){x.modifiedDate=NumberLong(x.modifiedDate.getTime()/1000);db.table_name.save(x)})
最近一些项目由于历史原因,字段类型存储混乱,比如一个collection里modifedDate列,有的存的是ISODate类型,有的是NumberLong时间戳,这在Mongodb中是严重不推荐的,需要转换成统一的。Mongodb并不提供Alter table这样的语句或者工具,只能写程序转。
Mongodb的客户端是js写的,其实用js写脚本就可以实现。
以上面的例子来说,要将ISODate类型全都转换为NumberLong时间戳:
1、查询多少记录是ISODate类型
①、$type
db.table_name.find({modifedDate:{$type:9}}).count()
其中的9是Mongodb定义的BSON Date类型对应的数字。下面这张表是BSON TYPE及他们对应的数字。
②、forEach函数和instanceof
count=0;
db.table_name.find().forEach(function(x){if(x.modifedDate instanceof Date){count++}});
print(count);
2、修改类型
使用forEach函数
db.table_name.find({modifedDate:{$type:9}}).forEach(function(x){x.modifiedDate=NumberLong(x.modifiedDate.getTime()/1000);db.table_name.save(x)})
相关文章推荐
- MongoDB Linux下的安装和启动
- MongoDB安装和基本使用
- 初步认识mongodb文件
- Linux下的mongodb服务监视脚本(启动服务)
- node+mongodb+WP构建的移动社交应用源码 分享
- Mongodb的Samus驱动
- .NET连接MongoDB数据库实例教程
- centOS下mongodb的安装
- Spring Data MongoDB简单的增删改查
- MongoDB安装指南
- mongodb数据库collection的增长的监控
- 浅析mongodb数据库链接
- 浅析mongodb主从库的配置
- Linux 安装MongoDB 2.6.5
- 在linux下手动安装mongodb
- 【未完】mongodb安装+副本集搭建+数据导入
- mongodb设置数据库用户,权限,java mongodb driver3.0驱动用户验证
- 在linux上用yum安装和卸载mongodb 3.0数据库
- AngularJS+Satellizer+Node.js+MongoDB
- MongoDB安装及配置成服务