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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:48:13