MongoDB 入门教程
数据库与集合
本教程共 50 篇 · 第 5 篇 · 更新于 2026-07-30 · 约 6 分钟阅读
MongoDBMongoDB 入门教程数据库集合usecreateCollection
5. 数据库与集合
本节目标:搞懂 MongoDB 的「数据库 → 集合 → 文档」三层结构,学会建库、建集合、查看和删除它们。
5.1 三层结构
MongoDB 的数据是层层套着的:
- 数据库(Database):最高层容器,一个实例里可以有多个库。
- 集合(Collection):库里的「表」,存放一类文档。
- 文档(Document):集合里的一条条记录。
对应关系可以理解为:数据库 ≈ 关系型里的「库」,集合 ≈ 「表」,文档 ≈ 「行」。
5.2 切换与创建数据库
MongoDB 不会在你 use 的一瞬间真建库。只有往里写了数据,库才真正存在。
// 切到(或准备)一个名为 shop 的库
use shop
test> use shop
switched to db shop
此时 show dbs 还看不到 shop,因为库还是空的。先插一条数据,库就被创建出来了:
// 首次写入,shop 库和 users 集合都会自动建好
db.users.insertOne({ name: "张伟", city: "北京" })
5.3 查看数据库与集合
// 列出所有已有数据的库
show dbs
// 列出当前库下的集合
show collections
test> show dbs
shop 8.00 KiB
test 40.0 KiB
Tip
show dbs只显示「已写入数据」的库。刚use但没写数据的库不会出现,这是新手常见的疑惑。
5.4 显式创建集合
多数时候不用显式建集合,首次插入会自动创建。但想带上选项(如上限集合、校验规则)时,用 createCollection:
// 显式建一个集合,可带选项
db.createCollection("orders")
test> db.createCollection("orders")
{ ok: 1 }
createCollection 还能设上限集合(capped)、校验规则等,进阶用法后面章节再展开。
5.5 删除集合与数据库
// 删除当前库下的某个集合
db.orders.drop()
// 删除当前整个数据库(危险,慎点)
db.dropDatabase()
Warning
db.dropDatabase()会清空当前库全部数据且不可恢复。生产环境执行前一定确认db.getName()看自己在哪个库。
5.6 命名规则
库名和集合名有几点限制,踩过坑的人都记得:
- 库名区分大小写,不能含空格、
.、/、\、\0(空字符)。 - 集合名不能以
system.开头,也不能含$(系统内部用)。 - 名字长度有限制(库名约 64 字节以内)。
Note据 MongoDB 8.3 官方文档,集合在创建时会被分配一个不可变的 UUID,在副本集各节点和分片上保持一致。
5.7 system 系统集合
以 system. 开头的集合是 MongoDB 自己用的,普通开发一般不直接动:
| 集合 | 作用 |
|---|---|
system.namespaces | 历史命名空间信息(旧版) |
system.indexes | 集合的索引定义 |
system.profile | 慢查询日志(开启 profiling 后) |
system.users | 账号与角色(启用鉴权后) |
Tip别手动改
system.*集合,容易把实例搞坏。要看索引用db.集合.getIndexes(),比直接查system.indexes安全。