kaisawind's blog
  • 关于
  • 所有帖子

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);
}

注意事项

  1. updateMany效率更高:单条命令完成所有更新,减少数据库交互
  2. bulkWrite适合大量数据:可以控制批量大小,避免内存溢出
  3. 添加索引:如果更新字段已建立索引,查询会更快
  4. 备份重要:执行批量更新前,建议先备份数据


辽ICP备2021007608号 | © 2026 | kaisawind

Facebook Twitter GitHub