首页/数据/NoSQL 速查/建库、切库与 dropDatabase
MongoDB99 条

建库、切库与 dropDatabase

use 只切换上下文,首次写入或建集合才真正创建数据库;dropDatabase 删除当前库的全部集合、索引与元数据。

NoSQL 速查数据更新于 2026-10-13

建库与删库的基本行为

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,报错信息里的库名就是库不存在与权限不足的分界点。

易错点

  • 以为 use 就是建库,脚本跑完才发现 show dbs 里没有:库只在首次写入时才创建
  • 没切库就执行 db.dropDatabase(),删掉的是默认 test 库;删除前务必用 db 打印上下文核对
  • 空库不出现在 show dbs 列表里属正常现象,不要误判成权限故障
  • 删库后连接对象仍停留在该库,后续任何写入会重新创建同名空库,看起来像"删不掉"
  • 分片集合删除后建议复查集群元数据,避免残留分块影响后续同名集合创建

数据来源与参考

  • MongoDB Manual: dropDatabase
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌