定義
$indexStatsコレクションの各インデックスの使用に関する統計を返します。アクセス制御を使用して実行している場合は、少なくとも
clusterMonitorロールを持つユーザーとして認証します。$indexStatsステージは空のドキュメントを受け取り、次の構文を使用します 。{ $indexStats: { } } 各インデックスについて、返されるドキュメントには次のフィールドが含まれます。
出力フィールド説明nameインデックス名。
インデックスキーの指定。
See also: spec.
mongodプロセスのホスト名とポート。ops: インデックスを使用したユーザーの操作数です。TTL インデックスによる削除や、チャンクの分割や移行などの内部操作は含まれません。since: MongoDBが統計情報を収集した時刻です。
警告:
accessesフィールドは、クエリが実行されるノードのインデックス使用状況メトリクスのみを報告します。より包括的なインデックス使用状況統計については、クラスター内の各ノードで$indexStatsを実行してください。The name of the shard associated with the host
シャーディングされたクラスターでのみ使用できます。
インデックスの完全な仕様ドキュメントで、インデックス キーとインデックス プロパティが含まれます。
インデックス オプション
hiddenは、値がtrueの場合にのみ含まれます。インデックスが現在構築中かどうかを示します。
trueの場合にのみ使用できます。
動作
アクセス フィールド
The statistics reported by the accesses field only apply to the node where the query is being run and only include index access driven by user requests. It does not include internal operations like deletion via TTL indexes or chunk split and migration operations.
制限事項
$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;