ObjectId 与主键设计
MongoDB 默认使用 ObjectId 作为文档的唯一标识(主键),该字段存储在 _id 字段中,每个文档必须唯一。
ObjectId 结构
ObjectId 是一个 12 字节的 BSON 类型,包含:
- 4 字节时间戳(精确到秒)
- 5 字节随机值(机器标识和进程 ID)
- 3 字节自增计数器
这种结构保证了在分布式环境下的唯一性和按时间排序的特性。
主键设计原则
- 默认使用 MongoDB 自动生成的
_id(ObjectId),适用于绝大多数场景。 - 如果业务需求有特殊主键,可以自定义
_id字段,如字符串、数字等,但必须保证唯一性。 - 避免频繁更新
_id,因为主键不可变,更新需删除重建。 - 主键应尽量短小,避免占用过多存储空间,影响索引效率。
- 利用 ObjectId 的时间戳部分,可以进行时间范围查询或排序。
示例
默认插入文档,自动生成 ObjectId:
db.users.insertOne({ name: "Alice", age: 30 })
// _id 字段自动生成 ObjectId
`
自定义 _id:
db.products.insertOne({ _id: "SKU12345", name: "Product A" })
理解 ObjectId 及主键设计,有助于保障数据唯一性和查询效率,是数据库设计的重要环节。
相关内容
- 什么是 MongoDB? MongoDB 是一种基于文档的 NoSQL 数据库,使用 BSON 格式存储数据,具有灵活的架构设计,适合海量数据、高并发应用,支持丰富查询与水平扩展。
- MongoDB 与关系型数据库的区别 MongoDB 与关系型数据库在数据模型、扩展性、灵活性和查询方式上存在显著差异,分别适用于不同类型的应用场景和业务需求。
- 使用场景与优势 MongoDB 以其灵活的数据模型、高性能和强大的扩展能力,广泛应用于现代互联网、移动应用、大数据分析等多种场景,具有显著优势。
- 安装 MongoDB(Windows / macOS / Linux / Docker) 本章节详细介绍在 Windows、macOS、Linux 和 Docker 环境下安装 MongoDB 的具体步骤,帮助用户快速搭建数据库环境。
- 使用 MongoDB Compass 和 MongoDB Shell 本章节介绍如何使用 MongoDB 官方的图形化管理工具 Compass 和命令行工具 MongoDB Shell,帮助用户高效管理和操作数据库。
- 数据库与集合的概念 本章节介绍 MongoDB 中数据库和集合的基本概念,帮助理解其数据组织结构及管理方式。