首页 / MongoDB 入门教程 / 删除文档与删集合

MongoDB 入门教程

删除文档与删集合

本教程共 50 篇 · 第 26 篇 · 更新于 2026-07-30 · 约 6 分钟阅读

MongoDBMongoDB 入门教程删除文档deleteManydrop删集合

26. 删除文档与删集合

本节目标:掌握 deleteOne、deleteMany 删除文档的差别,了解空条件删全部的风险,并弄清楚 drop() 删集合与删库时索引和数据会怎样。

删除比更新更「狠」——删了就找不回来了。所以 MongoDB 的删除方法设计得清晰分明:删文档用 deleteOne/deleteMany,删整张集合用 drop()

db.orders.insertMany([
  { _id: 1001, user_id: 1, status: "completed", total: 657 },
  { _id: 1002, user_id: 2, status: "cancelled", total: 398 },
  { _id: 1003, user_id: 1, status: "cancelled", total: 597 }
])

deleteOne:只删第一条匹配

updateOne 一个脾气,只删第一个命中的文档:

// 删掉第一个 status 为 cancelled 的订单
db.orders.deleteOne({ status: "cancelled" })

返回里 deletedCount 是 1。即使有两个 cancelled,也只删一个。

deleteMany:删掉所有匹配

想清空一类数据,用 deleteMany

// 删掉用户 1 的全部订单
db.orders.deleteMany({ user_id: 1 })

返回 deletedCount 会是 2(_id 1001 和 1003)。

Warning

deleteMany({}) 带空条件会删除集合里所有文档,但集合本身还在。这和 drop() 不同,后者连集合结构都删。删全表前务必三思。

删文档不会动索引

不管是删一条还是删全部,集合上的索引都原封不动保留。MongoDB 官方明确这一点:删除文档不丢索引。所以你删光数据后重新插入,索引直接生效,不用重建。

drop():删掉整张集合

drop() 连集合带它的数据、索引一起删掉:

// 删除整个 orders 集合(含索引)
db.orders.drop()

返回 true 表示删除成功。集合一旦 drop,里面的索引也没了,再建集合要重新建索引。

Tip

只想清空数据、保留索引和 collection 结构,用 deleteMany({});想连集合结构带索引全清掉,才用 drop()

删库:dropDatabase()

在数据库层面用 db.dropDatabase() 删掉当前库的所有集合:

// 删除当前所在的整个数据库
db.dropDatabase()
Warning

删库是最高危操作,生产环境一定要有备份且反复确认。MongoDB 默认不回收站,删了就是真没了。

方法选择一览

操作方法是否保留集合是否保留索引
删一条deleteOne
删一类deleteMany
清空数据deleteMany({})
删集合drop()
删数据库dropDatabase()
Note

写操作在单文档层面是原子性的:一条记录要么删掉、要么没删。但 deleteMany 一次删多条时,整批并非「全有或全无」——若执行中途被中断(如断网、主节点切换),可能只删了一部分。需要强一致请上事务。

删除讲完了。下章我们换个角度:查询返回的不是最终列表,而是一个「游标」,该怎么遍历它。