mysql迁移到mongodb_从MySQL迁移数据到MongoDB

需求

将mysql中的数据导入到mongodb

mysql中要将几条相似数据导入成一条记录

思路

从mysql导出数据到tvs

其中使用group将相似记录分组到一条记录, 并使用group_concat将相似记录的字段拼接为json

导入数据到mongodb, 设置相应的格式

其中自己组的json不能自动被mongodb识别, 只能暂时以字符串的形式保存, 以往日后能够解决

需要注意的点

group_concat存在长度限制,默认最大长度为1024

参考

解决方案 SET global group_concat_max_len=15000;

或者 SET session group_concat_max_len=15000;

一开始使用cvs格式,但是csv使用逗号分隔,tsv使用tab分隔,这里自己组了json,所以需要导出到tsv格式

mysql select空字段会是null,需要写一个默认值占位,这里使用了ifnull(update_date, cast('2019-01-01 00:00:00' as datetime)), 用法参考mysql的ifnull函数.

mongodb导入时设计类型以供mongdb识别, 命令为--columnsHaveTypes, 具体参考 mongoimport官方文档

第一步: 从MySQL导出数据

连接mysql

mysql -h 10.1.65.12 -uroot -p

进入数据库

use ci_bem_d_question_taizhou

取数据的命令

select question_id,concat('{',

group_concat("\"",unique_key,"\"",':',"\"",content,"\"" separator ',')

, '}')

,patient_id,task_id,version,delete_flag,create_date,ifnull(update_date, cast('2019-01-01 00:00:00' as datetime))

from qs_answer

group by patient_id, task_id, question_id

limit 5

into outfile '/tmp/mapline.tsv' fields terminated by '\t'optionally enclosed by ''lines terminated by '\n';

第二步: 导入到MongoDB

mongoimport --drop -d question_taizhou -c qs_answer --type tsv --columnsHaveTypes --fields "question_id.int64(),value.string(),patient_id.int64(),task_id.int64(),version.int32(),delete_flag.int32(),create_date.date(2006-01-02 15:04:05),update_date.date(2006-01-02 15:04:05)" --file 'mapline.tsv'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值