$indexStats(聚合)
定义
$indexStats
返回有关每个索引使用情况的统计数据。如果运行时启用访问控制,请以至少具有
clusterMonitor
角色的用户身份进行身份验证。访问控制,请以至少具有clusterMonitor
角色的用户身份进行身份验证。在
$indexStats
阶段,接受一个空文档,并具有以下语法{ $indexStats: { } } 对于每个索引,返回的文档包含以下字段
行为
访问字段
访问字段报告的统计信息仅适用于查询正在运行的节点,并且仅包括由用户请求驱动的索引访问。它不包括通过 TTL 索引 的删除或块分割和迁移等内部操作。
限制
$indexStats
必须是聚合管道的第一个阶段。$indexStats
不允许在 事务 中使用。
索引统计重置考虑因素
示例
例如,集合 orders
包含以下文档
db.orders.insertMany( [ { _id : 1, item : "abc", price : 12, quantity : 2, type: "apparel" }, { _id : 2, item : "jkl", price : 20, quantity : 1, type: "electronics" }, { _id : 3, item : "abc", price : 10, quantity : 5, type: "apparel" } ] )
在集合上创建以下两个索引
db.orders.createIndex( { item: 1, quantity: 1 } ) db.orders.createIndex( { type: 1, item: 1 } ) db.orders.createIndex( { price: 1 }, { partialFilterExpression: { type: "apparel" } } )
对集合运行一些查询
db.orders.find( { type: "apparel"} ) db.orders.find( { item: "abc" } ).sort( { quantity: 1 } ) db.orders.find( { price: { $gt: 10 } } )
要查看在 orders
集合上使用的索引的统计信息,请运行以下聚合操作
db.orders.aggregate( [ { $indexStats: { } } ] )
该操作返回一个包含每个索引使用统计信息的文档
[ { name: 'type_1_item_1', key: { type: 1, item: 1 }, host: 'examplehost.local:27018', accesses: { ops: Long("1"), since: ISODate("2024-05-02T15:07:21.420Z") }, shard: "shardA", spec: { v: 2, key: { type: 1, item: 1 }, name: 'type_1_item_1' } }, { name: 'item_1_quantity_1', key: { item: 1, quantity: 1 }, host: 'examplehost.local:27018', accesses: { ops: Long("1"), since: ISODate("2024-05-02T15:07:21.254Z") }, shard: "shardA", spec: { v: 2, key: { item: 1, quantity: 1 }, name: 'item_1_quantity_1' } }, { name: '_id_', key: { _id: 1 }, host: 'examplehost.local:27018', accesses: { ops: Long("0"), since: ISODate("2024-05-02T15:07:13.274Z") }, shard: "shardA", spec: { v: 2, key: { _id: 1 }, name: '_id_' } }, { name: 'price_1', key: { price: 1 }, host: 'examplehost.local:27018', accesses: { ops: Long("0"), since: ISODate("2024-05-02T15:07:54.847Z") }, shard: "shardA", spec: { v: 2, key: { price: 1 }, name: 'price_1', partialFilterExpression: { type: 'apparel' } } } ]