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

如何在mongosh中为MongoDB 6.0集合记录添加连续序号字段?

在MongoDB 6.0的mongosh中为文档添加连续sequence_number字段

方法一:forEach遍历更新(适合小数据量)

直接初始化起始序列值,遍历集合文档并逐个更新:

// 设置起始序列值,替换成你需要的随机数
const startSequence = 10;
let currentSeq = startSequence;

// 替换yourCollection为实际集合名称,添加sort可保证分配顺序稳定
db.yourCollection.find().sort({ _id: 1 }).forEach(doc => {
  db.yourCollection.updateOne(
    { _id: doc._id },
    // 若不需要字符串类型,去掉.toString()
    { $set: { sequence_number: currentSeq.toString() } }
  );
  currentSeq++;
});

方法二:聚合管道批量更新(适合大数据量)

利用MongoDB 6.0的窗口函数和$merge操作,高效批量处理:

const startSequence = 10;

db.yourCollection.aggregate([
  // 按指定字段排序,保证sequence_number分配顺序符合需求,可替换为业务字段
  { $sort: { _id: 1 } },
  // 为每个文档生成递增偏移量
  { $setWindowFields: {
      sortBy: { _id: 1 },
      output: {
        seqOffset: { $rank: {} }
      }
    }
  },
  // 计算最终sequence_number,转字符串类型(不需要则移除$toString)
  { $addFields: {
      sequence_number: { $toString: { $add: [startSequence - 1, "$seqOffset"] } }
    }
  },
  // 将更新结果合并回原集合
  { $merge: { into: "yourCollection", on: "_id", whenMatched: "replace" } }
]);

注意事项

  • 替换代码中的yourCollection为实际集合名称
  • 若不需要sequence_number为字符串类型,移除对应转换逻辑即可存储数值
  • 排序规则可根据业务需求调整,比如按创建时间字段排序,确保序列分配符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:53:10