listIndexes
定义
listIndexes
返回指定集合的索引信息。返回的索引信息包括用于创建索引的键和选项,以及 隐藏索引。您可以选择设置第一批结果的批量大小。
提示
在
mongosh
中,还可以通过db.collection.getIndexes()
辅助方法运行此命令。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.runCommand ( { listIndexes: "<collection-name>", cursor: { batchSize: <int> }, comment: <any> } )
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 |
---|---|---|
listIndexes | 字符串 | 集合的名称。 |
cursor.batchSize | 整型 | 可选。指定游标批处理大小。 |
comment | any | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 在 |
必需的访问权限
如果实施访问控制,内置的 read
角色将提供针对数据库中的集合运行 listIndexes
所需的权限。
行为
Atlas Search 索引
listIndexes
不返回 Atlas Search 索引上的信息。相反,使用 $listSearchIndexes
。
客户端断开连接
从 MongoDB 4.2 开始,如果在操作完成之前,发出 listIndexes
的客户端断开连接,MongoDB 将使用killOp
将 listIndexes
标记为终止。
副本集节点状态限制
若要在副本集节点上运行,listIndexes
操作要求该节点处于 PRIMARY
或 SECONDARY
状态。如果该节点处于其他状态,如 STARTUP2
,则操作错误。
通配符索引 (Wildcard Indexes)
从 MongoDB 6.3、6.0.5 和 5.0.16 开始,wildcardProjection
字段以其提交的形式存储索引投影。早期版本的服务器可能已将投影以标准化形式存储。
服务器使用相同的索引方式,但您可能会注意到 listIndexes
和 db.collection.getIndexes()
命令的输出有所不同。
输出
listIndexes.cursor
中游标指定的批处理大小返回结果集。批处理输出中的每个文档都包含以下字段:
字段类型说明id整型:64位整型。如果为零,则不再有批量信息。如果非零,则为游标 ID,可在getMore
命令中使用以获取下一批索引信息。ns字符串数据库和集合名称采用以下格式:<database-name>.<collection-name>
firstBatch文档索引信息包括用于创建索引的键和选项。仅当值为 true 时,隐藏的索引选项才会显示。
根据需要使用
getMore
检索其他结果。
示例
列出数据库索引
此示例列出 contacts
集合的索引,但未指定游标批处理大小。
1 db.runCommand ( 2 { 3 listIndexes: "contacts" 4 } 5 )
1 { 2 cursor: { 3 id: Long("0"), 4 ns: 'test.contacts', 5 firstBatch: [ 6 { v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.contacts' }, 7 { v: 2, key: { a: 1 }, name: 'a_1', ns: 'test.contacts' } 8 ] 9 }, 10 ok: 1 11 }
指定结果批量大小
此示例列出 contacts
集合的索引,并指定游标批处理大小为 1。
1 db.runCommand ( 2 { 3 listIndexes: "contacts", cursor: { batchSize: 1 } 4 } 5 )
1 { 2 cursor: { 3 id: Long("4809221676960028307"), 4 ns: 'test.contacts', 5 firstBatch: [ { v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.contacts' } ] 6 }, 7 ok: 1 8 }
检索其他结果
此示例使用 getMore
从 contacts
集合中检索更多结果批次。
1 db.runCommand( 2 { 3 getMore: Long("4809221676960028307"), collection: "contacts" 4 } 5 )
1 { 2 cursor: { 3 nextBatch: [ { v: 2, key: { a: 1 }, name: 'a_1', ns: 'test.contacts' } ], 4 id: Long("0"), 5 ns: 'test.contacts' 6 }, 7 ok: 1 8 }