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

如何通过MongoDB单查询为school库questions集合文档加自增序号

为MongoDB文档添加自增序号的实现方法

针对你的需求(数据库school、集合questions,给每个文档添加自增序号且保留原_id),这里提供两种可行的单查询实现方案:

方案1:使用$setWindowFields(MongoDB 5.0及以上版本)

这个方法利用窗口函数直接生成自增序号,效率较高,适合新版本MongoDB:

db.school.questions.updateMany(
  {},
  [
    {
      $setWindowFields: {
        sortBy: { _id: 1 }, // 可根据需求更换排序字段,比如按创建时间排序
        output: {
          serial_number: { $documentNumber: {} } // 生成从1开始的自增序号
        }
      }
    }
  ]
)

说明:

  • $documentNumber会基于指定的排序规则生成连续的自增整数
  • 排序字段可以根据业务调整,比如如果需要按发布时间排序,把sortBy改成{ published_date: 1 }即可
  • 执行后每个文档会新增serial_number字段,原_id完全保留

方案2:使用计数器变量+forEach循环(兼容旧版本MongoDB)

如果你的MongoDB版本低于5.0,可以用这种传统方式实现:

let counter = 1;
db.school.questions.find().sort({ _id: 1 }).forEach(doc => {
  db.school.questions.updateOne(
    { _id: doc._id },
    { $set: { serial_number: counter } }
  );
  counter++;
})

说明:

  • 先初始化计数器counter为1,然后按指定顺序遍历文档
  • 对每个文档通过原_id定位,添加自增序号字段
  • 同样可以修改sort里的字段来调整序号的生成顺序

注意:两种方案都会新增一个serial_number字段存储自增序号,你可以根据需要修改字段名。

内容的提问来源于stack exchange,提问作者Kiran S youtube channel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:39:55