You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为MongoDB集合文档按每100个递增添加指定值的新字段?

给MongoDB集合批量添加分段字段的实现方案

针对你的需求,这里提供两种实用的实现方式,按需选择即可:


方法一:Mongo Shell循环批量更新(全版本兼容)

通过脚本按批次循环处理,适合所有MongoDB版本。核心是先按指定字段排序确保顺序稳定,再每100条为一组更新字段值。

// 替换为你的集合名称
const coll = db.getCollection('your_collection');
const batchSize = 100;
const totalDocs = coll.countDocuments();
const totalGroups = Math.ceil(totalDocs / batchSize);

// 按_id排序(可替换为业务排序字段,比如创建时间create_time)
for (let group = 1; group <= totalGroups; group++) {
  const skipCount = (group - 1) * batchSize;
  // 提取当前组的所有文档_id
  const docIds = coll.find({}, { _id: 1 })
                     .sort({ _id: 1 })
                     .skip(skipCount)
                     .limit(batchSize)
                     .map(doc => doc._id);
  // 更新当前组的字段值
  coll.updateMany(
    { _id: { $in: docIds } },
    { $set: { group_tag: `${group}` } }
  );
  print(`完成第${group}组更新,处理${docIds.length}条文档`);
}

方法二:聚合管道+批量写入(MongoDB 5.0+)

利用MongoDB 5.0新增的窗口函数,一步计算出每个文档的分组号,再批量更新,效率更高。

// 替换为你的集合名称
const coll = db.getCollection('your_collection');
const batchSize = 100;

// 通过聚合计算每个文档的分组号
const updateData = coll.aggregate([
  // 按指定字段排序(确保分组顺序稳定)
  { $sort: { _id: 1 } },
  {
    $setWindowFields: {
      partitionBy: null, // 整个集合作为一个窗口
      sortBy: { _id: 1 },
      output: {
        docSeq: { $documentNumber: {} } // 生成从1开始的连续序号
      }
    }
  },
  {
    $project: {
      _id: 1,
      group_tag: {
        $toString: { $ceil: { $divide: ["$docSeq", batchSize] } } // 计算分组号并转字符串
      }
    }
  }
]).toArray();

// 批量写入更新
const bulkOps = updateData.map(item => ({
  updateOne: {
    filter: { _id: item._id },
    update: { $set: { group_tag: item.group_tag } }
  }
}));

if (bulkOps.length > 0) {
  coll.bulkWrite(bulkOps);
  print(`完成全部更新,共处理${bulkOps.length}条文档`);
}

注意事项

  • 操作前务必备份集合:db.your_collection.copyTo('your_collection_backup'),避免数据意外丢失
  • 排序字段要选稳定的唯一字段(如_id、创建时间),否则分组会出现混乱
  • group_tag可替换为你实际需要的字段名

内容的提问来源于stack exchange,提问作者Tribe56123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:22:16