如何使用mongoose-sequence为MongoDB现有记录添加自增字段?
为MongoDB现有记录添加自增project_id字段
1. 先创建计数器集合
要实现自增ID,得先有个专门的计数器集合来追踪当前的ID值,避免重复或断号。运行以下命令:
db.createCollection("counters") db.counters.insertOne({ _id: "projectId", sequence_value: 0 })
2. 批量更新现有记录
用forEach遍历projects集合里的所有文档,逐个分配递增的project_id。执行这段脚本:
// 先获取初始的自增值 var currentId = db.counters.findOneAndUpdate( { _id: "projectId" }, { $inc: { sequence_value: 1 } }, { returnDocument: "after" } ).sequence_value; // 遍历所有项目文档并更新 db.projects.find().forEach(function(project) { db.projects.updateOne( { _id: project._id }, { $set: { project_id: currentId } } ); currentId++; // 同步更新计数器,防止脚本中途中断后重启导致重复计数 db.counters.updateOne({ _id: "projectId" }, { $set: { sequence_value: currentId } }); });
3. 验证更新结果
执行下面的查询,检查所有文档的project_id是否连续递增:
db.projects.find({}, { project_id: 1, _id: 0 }).sort({ project_id: 1 })
后续新增文档的自增处理
如果之后要给新插入的文档自动生成自增project_id,可以用这个工具函数:
function getNextProjectId() { var result = db.counters.findOneAndUpdate( { _id: "projectId" }, { $inc: { sequence_value: 1 } }, { returnDocument: "after" } ); return result.sequence_value; } // 插入新文档示例 db.projects.insertOne({ project_id: getNextProjectId(), name: "新项目", // 其他字段... })
内容的提问来源于stack exchange,提问作者Mukesh M
相关产品推荐
相关产品推荐

