前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb修改字段数据类型

mongodb修改字段数据类型

作者头像
林老师带你学编程
发布2019-05-26 08:57:53
1.8K0
发布2019-05-26 08:57:53
举报
文章被收录于专栏:强仔仔强仔仔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1434550

今天遇到一个很尴尬的应用场景,因为新架构之前,我们mongodb的yfy_score_record表中DATE_TIME字段的类型是string类型,后来上了新架构之后DATE_TIME字段变成DateTime类型了,然后统计某一个月内数据的时候就出现问题了,因为string类型的数据查询方式和DateTime类型查询方式是完全不一样的两种查询。基于这种情况,我们只能将线上的数据类型进行修改了,将string类型的数据全部修改为DateTime类型。

技术选型:

解决这种情况有两种方法,一种是通过Java来将数据修改过来,二是通过mongodb自己的脚本来修改。我们来分析一下这两种方法的优缺点:

Java方式:代码侵入式强,需要写业务之外的代码,会留下一堆无用的信息,但是采用Java的方式可控性会比较高、自由性强。

脚本方式:对代码0侵入,不需在应用中写任何代码,不会留下任何信息,但是可控性不高,对mongodb脚本能力要求比较高。

解决方法:

对比上面的两种方法,最后我们决定采用脚本的方式数据类型修改,因为这种方式时间周期最短,代码量最少,也不需要修改应用代码。我们只需要在mongodb命令界面输入下面的脚本命令就可以了,代码如下所示:

db.yfy_score_record.find({DATE_TIME:{$type:"string"}}).forEach(function(doc) {

doc.DATE_TIME=new Date(doc.DATE_TIME);

db.yfy_score_record.save(doc);

})

脚本介绍:

  • yfy_score_record是表名称
  • {DATE_TIME:{$type:"string"}}表示DATE_TIME字段必须是string类型
  • doc.DATE_TIME=new Date(doc.DATE_TIME);修改DATE_TIME字段类型,变为Date类型
  • db.yfy_score_record.save(doc);保存修改后的字段信息

具体步骤:

我这边使用的是NoSQL Manager for MongoDB工具进行MongoDB数据管理的,新架构之前的数据如下所示:

新架构之后的数据:

在yfy_score_record右键打来Shell脚本,然后输入我们的脚本命令,如下所示:

总结:

脚本其实很简单,最主要是对线上的数据进行修改都有一定的风险,所以在修改数据之前一定要先进行备份,但是在脚本运行期间新产生的数据就会丢失。未来保证脚本的可靠性,我们一定要在测试环境多测试几次,然后再到生产运行。好了今天的内容就介绍到这边了,谢谢大家的阅读~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档