背景:项目前期,在mongo数据库中插入了大批数据。后期由于开发纬度变化,需要批量更新该批数据。考虑到java实现mongo批量更新替换数据,过程繁琐,且性能较低,故探索mongo本身自带批量更新方法。
准备:单条文档图示如下
此次需要批量修改键[rs]对应的值,数据层层嵌套,较为复杂。
实现:
mongo简单更新方法参考:db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
在此基础上进行改造如下:
db.getCollection('third.call.records').updateMany( { "mobile" : "137xxxx" } , { $set : { "rawData" : {"rs":'{"task_id":"24517218f89e432d83bc1bf0d43e262c","data":{"raw_data":......},"success":"true","note":""},"code":"0"}'}} );
其中{ "mobile" : "137xxxx" }为匹配条件,选定更改数据范围,此后将[rs]对应新值替换即可实现批量更新。
注意:由于[rs]值较大,400K+,尝试其他方法无效后,采用Robo 3T客户端执行,为了看到执行结果,将Options下Change Shell TimeOut值修改为10分钟或更大。