建库与删库的基本行为
MongoDB 没有 CREATE DATABASE 语句,库是隐式创建的容器:use <db> 只切换 Shell 上下文,第一次写入数据、显式 createCollection 或建索引时才在磁盘上真正生成库。删除用 db.dropDatabase(),它会移除当前库的全部集合、索引与元数据,且没有回收站。理解"隐式创建"是避免"以为建了库"这类低级事故的关键。
基本信息
| 切换/创建上下文 | use app_inventory |
|---|---|
| 真正落库时机 | 首次写入数据、createCollection 或建索引 |
| 删除当前库 | db.dropDatabase() |
| 查看 | db.getName() / db.getCollectionNames() |
| 适用版本 | MongoDB 4.x 起一致,副本集与分片集群同一条命令 |
示例
示例
use app_inventory # 只切换上下文,库尚未创建
db.orders.insertOne({ sku: "A-1" }) # 首次写入,库与集合同时落盘
show dbs # 现在能看到 app_inventory
db.getCollectionNames() # 核对集合列表
db.orders.drop() # 只删集合,库保留
db.dropDatabase() # 删除当前库,不可恢复
db.getName() # 删库后上下文仍停留,但库已不存在典型使用场景
- 新建业务库:切到目标库后先建集合与索引,让库真正落盘
- 清理测试环境:一次性回收整库,比逐集合 drop 快
- 迁移后校验:切库后用 getCollectionNames 核对集合是否齐全
- 权限排查:切到 admin 库查用户对目标库的 roles 绑定
- 误建库清理:脚本跑错库名后需要确认有哪些空库残留
常用操作对照
| 操作 | 命令 | 注意 |
|---|---|---|
| 切换或创建库 | use <db> | 不落盘,仅切换上下文 |
| 删除当前库 | db.dropDatabase() | 删集合、索引与元数据,不可恢复 |
| 删除集合 | db.<coll>.drop() | 只删集合,库保留 |
| 查看当前库 | db / db.getName() | 上下文可能仍指向已删除的库 |
dropDatabase 不可恢复且不受大多数备份自动保护:执行前确认连接串指向的环境与库名,生产库先确认当日备份已完成,再动手。
隐式创建同样受权限约束:账号只有 readAnyDatabase 一类只读角色时,第一次写入会直接报 not authorized on <db> to execute command,报错信息里的库名就是库不存在与权限不足的分界点。