如何在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
相关产品推荐
相关产品推荐

