定義
- $indexStats
- コレクションの各インデックスの使用に関する統計を返します。 アクセス制御を使用して実行している場合は、少なくとも - clusterMonitorロールを持つユーザーとして認証します。- $indexStatsステージは空のドキュメントを受け取り、次の構文を使用します。- { $indexStats: { } } - 各インデックスについて、返されるドキュメントには次のフィールドが含まれます。 出力フィールド説明- name- インデックス名。 - インデックスキーの指定。 - mongodプロセスのホスト名とポート。- インデックスの使用に関する統計: - opsは、インデックスを使用した操作の数です。
- sinceは、MongoDBが統計を収集した時刻です。
 - インデックスの完全な仕様ドキュメントで、インデックス キーとインデックス プロパティが含まれます。 - インデックス オプション - hiddenは、値が- trueの場合にのみ含まれます。- インデックスが現在構築中かどうかを示します。 - trueの場合にのみ使用できます。
動作
アクセス フィールド
アクセス フィールドによって報告される統計は、クエリが実行されているノードにのみ適用され、ユーザーのリクエストによって行われたインデックスへのアクセスのみが含まれます。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" } ] ) 
コレクションに次の 2 つのインデックスを作成します。
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' }       }    } ] 
MongoDB Node.jsドライバーを使用して $indexStats ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $indexStats 演算子を使用します。
次の例では、コレクションの各インデックスの使用状況統計を含むドキュメントを返すパイプラインステージを作成します。次に、この例では集計パイプラインを実行します。
const pipeline = [{ $indexStats: {} }]; const cursor = collection.aggregate(pipeline); return cursor;