原文传送门
最近一些项目由于历史原因,字段类型存储混乱,比如一个collection里modifedDate列,有的存的是ISODate类型,有的是NumberLong时间戳,这在Mongodb中是严重不推荐的,需要转换成统一的。Mongodb并不提供Alter table这样的语句或者工具,只能写程序转。
Mongodb的客户端是js写的,其实用js写脚本就可以实现。以上面的例子来说,要将ISODate类型全都转换为NumberLong时间戳:
1、查询多少记录是ISODate类型
①、$type
- db.table_name.find({modifedDate:{$type:9}}).count()
- count=0;
- db.table_name.find().forEach(function(x){if(x.modifedDate instanceof Date){count++}});
- print(count);
使用forEach函数
- db.table_name.find({modifedDate:{$type:9}}).forEach(function(x){x.modifiedDate=NumberLong(x.modifiedDate.getTime()/1000);db.table_name.save(x)})
本文介绍如何使用Mongodb的JS客户端解决字段类型不一致的问题,通过查询特定类型的记录数并将其转换为统一的时间戳格式。

3355

被折叠的 条评论
为什么被折叠?



