mongodb批量修改字段的值 - Thu, Mar 14, 2019
由于代码Coding时,单词拼写错误,导致需要把数据库meta.type的值进行修改。
由于代码Coding时,单词拼写错误,导致需要把数据库meta.type的值进行修改。
提示: MongoDB已发布7.x版本,支持时序集合、变更流等新特性。
批量更新字段值
方法1:使用forEach循环
db.getCollection('bi4drg1ggp7616h4g340').find({"meta.type":"pubish"}).forEach(
function(item){
db.getCollection('bi4drg1ggp7616h4g340').update({"_id":item._id},{$set:{"meta.type": "publish"}})
}
)
方法2:使用updateMany(推荐,性能更好)
// MongoDB 3.2+
db.getCollection('bi4drg1ggp7616h4g340').updateMany(
{ "meta.type": "pubish" },
{ $set: { "meta.type": "publish" } }
)
方法3:使用bulkWrite批量操作
// 适合大量数据更新
var bulkOps = [];
db.getCollection('bi4drg1ggp7616h4g340').find({"meta.type":"pubish"}).forEach(function(item) {
bulkOps.push({
"updateOne": {
"filter": { "_id": item._id },
"update": { "$set": { "meta.type": "publish" } }
}
});
if (bulkOps.length === 1000) {
db.getCollection('bi4drg1ggp7616h4g340').bulkWrite(bulkOps);
bulkOps = [];
}
});
if (bulkOps.length > 0) {
db.getCollection('bi4drg1ggp7616h4g340').bulkWrite(bulkOps);
}
注意事项
- updateMany效率更高:单条命令完成所有更新,减少数据库交互
- bulkWrite适合大量数据:可以控制批量大小,避免内存溢出
- 添加索引:如果更新字段已建立索引,查询会更快
- 备份重要:执行批量更新前,建议先备份数据