dropIndexes()(批量删除索引)
最后更新:2026-10-09
dropIndexes()(批量删除索引)
dropIndexes()删除集合上的一个或多个索引,例如`db.users.dropIndexes()`删除全部非_id索引,也可传索引名数组只删指定索引。它会同时删除以指定名称为前缀的所有索引(如'age_1'会连同'age_1_text'一起删)。_id索引始终保留。这是清理测试环境索引的常用手段。
| 分类 | 索引与管理 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.dropIndexes(<索引名数组>)
⚙️ 参数
| 索引名数组 | 可选。要删除的索引名列表;省略则删除全部非_id索引。 |
|---|
返回值:包含删除数量和结果状态的信息对象。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// dropIndexes:删除age和email上的两个索引
db.users.dropIndexes(['age_1', 'email_1'])
运行结果:
{ ok: 1, nIndexesWas: 4, nIndexesRemoved: 2 }
📌 注意事项
- 不传参数会删除全部非_id索引
- 按前缀匹配删除,'age_1'会连带删除'age_1_text'等
- _id索引不能被删除
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QdropIndexes不传参数会删除所有索引吗?
A会删除除_id索引外的全部索引,操作前务必用getIndexes()确认列表。
QdropIndexes能指定删除哪几个吗?
A可以,传入索引名数组即可,例如db.users.dropIndexes(['age_1', 'email_1'])。
Q为什么dropIndexes删了age_1还会删别的索引?
AdropIndexes按名称前缀匹配,所有以'age_1'开头的索引(如'age_1_text')都会被一并删除。