因业务需要,使用canal同步数据时,将mysql数据同步至mongodb时,有些数据类型是int,但保存时却为string,所以需要进行手工转换。
mongodb版本差异很大,4.0以下的低版本的方案一般是:
db.my_collection.find().forEach( function(obj) { obj.my_value= new NumberInt(obj.my_value); db.my_collection.save(obj); });
但这种方案在4.0是无效的,因此笔者尝试了多种方法:
此种方法是有效的,并且支持多个字段进行修改,主要参考文章:https://stackoverflow.com/questions/59808898/mongodb-convert-element-data-type-from-numeric-string-to-number-for-a-large-col
db.SurName.aggregate([
{
$addFields: {
field1: {$toInt: "$field1"},
field2: {$toInt: "$field2"}
}
},
{$out: "SurName"}
])
以下方案也是有效的,但是笔者没找到怎么修改多字段的数据类型,主要参考文章: https://stackoverflow.com/questions/4973095/how-to-change-the-type-of-a-field
db.orders.drop(); db.orders.insertMany( [ { _id: 1, item: "apple", qty: "5", price: 10 }, { _id: 2, item: "pie", qty: "10", price: NumberDecimal("20.0") }, { _id: 3, item: "ice cream", qty: "2", price: "4.99" }, { _id: 4, item: "almonds" , qty: "5", price: 5 } ] ) var bulkOps = []; db.orders.find({}).forEach(function (doc) { var q = parseInt(doc.qty); bulkOps.push( { "updateOne": { "filter": {"_id": doc._id}, "update": {"$set": {"qty": q}} } } ); }) db.orders.bulkWrite(bulkOps);
分类:
database
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2014-06-13 Android学习---SQLite数据库的增删改查和事务(transaction)调用