MongoDB 删除集合
MongoDB 提供了删除集合的功能,可以清理不再需要的集合。删除集合会同时删除集合中的所有文档和索引。
删除集合方法
基本语法
javascript
db.collection.drop()示例
javascript
// 删除 users 集合
db.users.drop()
// 返回 true 表示删除成功
// 返回 false 表示集合不存在删除前检查
javascript
// 检查集合是否存在
if (db.getCollectionNames().indexOf("users") >= 0) {
db.users.drop()
print("集合已删除")
} else {
print("集合不存在")
}删除集合特点
删除的内容
- 集合中的所有文档
- 集合的所有索引
- 集合本身
保留的内容
- 数据库本身
- 其他集合
- 数据库用户和权限
性能特点
- 删除操作非常快(几乎瞬间完成)
- 不会阻塞其他操作
- 空间不会立即释放(需要 compact)
删除多个集合
批量删除
javascript
// 要删除的集合列表
var collectionsToDrop = ["temp_logs", "cache_data", "old_records"]
collectionsToDrop.forEach(function(colName) {
if (db.getCollectionNames().indexOf(colName) >= 0) {
db.getCollection(colName).drop()
print("已删除集合:", colName)
} else {
print("集合不存在:", colName)
}
})删除所有集合(保留数据库)
javascript
// 方法 1:遍历删除
db.getCollectionNames().forEach(function(colName) {
if (!colName.startsWith("system.")) {
db.getCollection(colName).drop()
print("已删除:", colName)
}
})
// 方法 2:使用循环
var collections = db.getCollectionNames()
for (var i = 0; i < collections.length; i++) {
var colName = collections[i]
if (!colName.startsWith("system.")) {
db[colName].drop()
}
}安全删除流程
步骤 1:备份数据
bash
# 导出集合
mongodump --db mydb --collection users --out /backup/
# 或使用 mongoexport
mongoexport --db mydb --collection users --out /backup/users.json步骤 2:确认信息
javascript
// 查看集合统计
db.users.stats()
// 查看文档数量
db.users.countDocuments()
// 查看索引
db.users.getIndexes()步骤 3:执行删除
javascript
// 安全删除函数
function safeDropCollection(colName) {
// 确认集合存在
if (db.getCollectionNames().indexOf(colName) === -1) {
print("错误: 集合不存在 -", colName)
return false
}
// 获取统计信息
var stats = db[colName].stats()
print("集合:", colName)
print("文档数:", stats.count)
print("数据大小:", stats.size, "bytes")
print("索引数:", stats.nindexes)
// 执行删除
var result = db[colName].drop()
if (result) {
print("删除成功:", colName)
return true
} else {
print("删除失败:", colName)
return false
}
}
// 使用
safeDropCollection("users")删除与清空对比
drop() vs deleteMany()
| 特性 | drop() | deleteMany() |
|---|---|---|
| 删除内容 | 集合+文档+索引 | 仅文档 |
| 速度 | 极快 | 取决于文档数量 |
| 索引 | 删除 | 保留 |
| 空间释放 | 需要 compact | 不释放 |
| 可恢复性 | 低 | 可回滚(事务中) |
清空集合(保留结构)
javascript
// 方法 1:deleteMany
db.users.deleteMany({})
// 方法 2:remove(已弃用)
db.users.remove({})命令行删除
非交互式删除
bash
# 直接执行
mongosh --eval "db.getSiblingDB('mydb').users.drop()"
# 带认证
mongosh -u admin -p --authenticationDatabase admin --eval "db.getSiblingDB('mydb').users.drop()"脚本删除
bash
#!/bin/bash
# drop-collection.sh
DB_NAME=$1
COLLECTION_NAME=$2
if [ -z "$DB_NAME" ] || [ -z "$COLLECTION_NAME" ]; then
echo "用法: $0 <数据库名> <集合名>"
exit 1
fi
# 备份
echo "备份集合..."
mongodump --db $DB_NAME --collection $COLLECTION_NAME --out /backup/
# 删除
echo "删除集合..."
mongosh --eval "db.getSiblingDB('$DB_NAME').$COLLECTION_NAME.drop()"
echo "完成"常见问题
Q: 删除后空间没有释放?
A: 使用 compact 命令释放空间:
javascript
// 压缩数据库
db.runCommand({ compact: "users" })Q: 误删了集合如何恢复?
A: 从备份恢复:
bash
mongorestore --db mydb --collection users /backup/mydb/users.bsonQ: 如何删除系统集合?
A: 不建议删除系统集合,但可以使用:
javascript
db.system.indexes.drop() // 谨慎操作!总结
删除集合要点:
- 操作不可逆,删除前务必备份
- 同时删除集合、文档和索引
- 空间不会立即释放
- 比 deleteMany() 更快更彻底
在下一章中,我们将学习 MongoDB 插入文档。