
本文介绍在使用 mgo.v2 驱动时,如何安全、高效地清空 mongodb 集合中全部文档,重点讲解 `removeall(nil)` 的正确用法、错误处理及生产环境注意事项。
在 MongoDB 原生 Shell 中,我们习惯用 db.mycollection.remove({}) 清空集合;而在 Go 中使用 gopkg.in/mgo.v2 时,对应的操作是调用 RemoveAll() 方法,并传入 nil 作为选择器参数——这等价于匹配所有文档。
✅ 正确写法如下:
info, err := sess.DB("mydb").C("mycollection").RemoveAll(nil)
if err != nil {
log.Fatal("删除失败:", err)
}
log.Printf("已成功删除 %d 个文档", info.Removed)⚠️ 注意事项:
- RemoveAll(nil) 是唯一推荐的全量删除方式;传入空 bson.M{}(如 bson.M{})不会匹配所有文档,反而可能因类型不匹配导致意外行为或 panic。
- RemoveAll() 返回 *mgo.ChangeInfo,其中 info.Removed 表示实际被删除的文档数量,务必检查该值以确认操作效果(例如防止误删空集合却未报错)。
- 该操作不可回滚,且不触发 drop 集合的副作用(如索引、TTL 等元信息保留),若需彻底重置集合(含索引、统计信息),应改用 DropCollection():
err := sess.DB("mydb").C("mycollection").DropCollection() - 生产环境中,建议添加前置确认逻辑(如环境校验、开关控制)或使用带时间戳的软删除策略,避免误操作导致数据丢失。
? 小结:清空集合首选 RemoveAll(nil),始终检查返回值与错误,慎用 DropCollection(),并在关键路径加入日志与防护机制。
立即学习“go语言免费学习笔记(深入)”;










