MongoDB db.collection.getIndexes() 详解
db.collection.getIndexes()
是 MongoDB 中用于查看集合所有索引信息的核心命令。通过该命令,可以快速获取索引的键模式、名称、版本等元数据,为查询优化和索引管理提供关键依据。
一、命令语法与功能
• 语法:db.<collection_name>.getIndexes()
• 功能:返回当前集合的所有索引列表,包括默认的 _id
索引和用户自定义索引。
• 输出示例:
[
{
"v": 2, // 索引版本(由 MongoDB 内部维护)
"key": { "_id": 1 }, // 索引键模式(1=升序,-1=降序)
"name": "_id_", // 索引名称(自动生成或用户指定)
"ns": "test.users" // 索引所属的集合命名空间
},
{
"v": 2,
"key": { "age": 1 }, // 自定义索引字段(此处为 age 升序)
"name": "age_1", // 索引名称(默认格式:字段名_排序方向)
"ns": "test.users"
}
]
二、核心字段解析
字段 | 说明 |
---|---|
v |
索引版本号(如 v: 2 表示使用 MongoDB 4.2+ 的索引格式) |
key |
索引的键模式,定义字段及其排序方向(如 { age: 1 } 表示按 age 升序构建索引) |
name |
索引唯一标识符,默认格式为 <字段名>_<排序方向> ,可通过 createIndex 自定义 |
ns |
索引所属的集合全称(格式:数据库名.集合名 ) |
其他字段 | 可能包含 unique (唯一性约束)、sparse (稀疏索引)等用户定义的参数 |
三、应用场景与示例
-
查看索引结构
快速验证索引是否按预期创建:db.users.getIndexes() // 输出包含 age 字段的索引信息
-
优化查询性能
结合explain("executionStats")
分析查询是否命中索引:db.users.find({ age: 30 }).explain("executionStats")
-
索引管理
• 删除冗余索引:根据name
字段使用dropIndex()
删除无效索引db.users.dropIndex("age_1")
• 重建索引:通过
reIndex()
修复索引碎片(慎用,可能影响性能)
四、注意事项
- 默认
_id
索引:所有集合自动创建_id
字段的唯一索引,不可删除。 - 复合索引顺序:复合索引的字段顺序影响查询效率(如
{ age:1, name:-1 }
)。 - 索引限制:单个集合最多 64 个索引,需避免过度冗余。
通过 db.collection.getIndexes()
,开发者可以高效管理索引资源,为数据库性能调优提供数据支持。更多高级用法可参考 MongoDB 官方文档。