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(稀疏索引)等用户定义的参数

三、应用场景与示例

  1. 查看索引结构
    快速验证索引是否按预期创建:

    db.users.getIndexes()
    // 输出包含 age 字段的索引信息
    
  2. 优化查询性能
    结合 explain("executionStats") 分析查询是否命中索引:

    db.users.find({ age: 30 }).explain("executionStats")
    
  3. 索引管理
    删除冗余索引:根据 name 字段使用 dropIndex() 删除无效索引

    db.users.dropIndex("age_1")
    

    重建索引:通过 reIndex() 修复索引碎片(慎用,可能影响性能)


四、注意事项

  1. 默认 _id 索引:所有集合自动创建 _id 字段的唯一索引,不可删除。
  2. 复合索引顺序:复合索引的字段顺序影响查询效率(如 { age:1, name:-1 })。
  3. 索引限制:单个集合最多 64 个索引,需避免过度冗余。

通过 db.collection.getIndexes(),开发者可以高效管理索引资源,为数据库性能调优提供数据支持。更多高级用法可参考 MongoDB 官方文档。

posted @ 2025-03-26 22:02  千陌666  阅读(21)  评论(0)    收藏  举报