温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MongoDB有自增吗

发布时间:2026-09-28 02:23:24 来源:亿速云 阅读:91 作者:小樊 栏目:数据库

简短回答:MongoDB 本身没有像 MySQL 那样内置的“自增主键(AUTO_INCREMENT)”机制,但可以通过“手动方式”实现自增 ID。

下面详细说明:


1. 默认情况:ObjectId 不是自增

MongoDB 默认使用 _id 字段,类型通常是 ObjectId:

{
  "_id": ObjectId("65f1c2a9e3b4c1a2d3e4f5a6")
}

特点:

  • 分布式友好
  • 时间有序但不连续
  • 不是整数自增

2. 如何“手动实现”自增 ID

MongoDB 官方推荐方式:使用计数器集合(counters collection)

示例

(1)创建计数器集合

db.counters.insertOne({
  _id: "orderId",
  seq: 0
})

(2)获取自增 ID

function getNextSequence(name) {
  const result = db.counters.findOneAndUpdate(
    { _id: name },
    { $inc: { seq: 1 } },
    { returnDocument: "after" }
  );
  return result.seq;
}

(3)插入数据时使用

db.orders.insertOne({
  _id: getNextSequence("orderId"),
  name: "订单A"
})

结果:

{ "_id": 1, "name": "订单A" }
{ "_id": 2, "name": "订单B" }

3. 注意事项(非常重要)

  • ❌ 不支持并发安全的 AUTO_INCREMENT
  • ✅ findAndModify / findOneAndUpdate 是原子操作
  • ⚠️ 自增 ID 在分片集群(sharding)中不推荐
  • ✅ 更适合:单机、业务序号、订单号等场景

4. 什么时候不该用自增 ID?

不建议使用自增 ID 的情况:

  • 分布式系统
  • 高并发写入
  • 需要隐藏数据量(自增容易暴露总数)

5. 总结

问题 答案
MongoDB 有自增吗 ❌ 没有内置
能实现自增吗 ✅ 可以手动实现
推荐用吗 ⚠️ 看场景
默认推荐 ✅ ObjectId

如果你愿意,我可以:

  • 给你 Spring / Node / Python 的实现示例
  • 或告诉你 什么场景该用 ObjectId,什么该用自增

你用的是哪种语言?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手