それぞれのフィールドが設定されている場合、オブジェクトはスパースインデックスに含まれますnull
。したがって、を使用$exists
して、値が設定されている要素の数を取得できます。
> db.Foo.count();
185
> db.Foo.find({"SparseField" : {$exists : true} }).count();
174
したがって、11個のドキュメントのみがスパースインデックスに含まれていません。または、を使用hint
して、スパースインデックスを使用するクエリを強制し、を使用explain
していくつかの統計を取得することもできます。
> db.Foo.find().hint("sparse_index_name").explain();
{
"cursor" : "BtreeCursor sparse_index_name",
"n" : 174,
}
を使用したCAVEATクエリexplain()
は、explainを使用しないクエリとは異なる動作をします。具体的にdb.Foo.find().hint("sparse_index_name").count()
は、174ではなく185を返します。
スパースインデックスが正しく使用されているかどうかを時々チェックすることは理にかなっています。
> db.Foo.find({"SparseField" : null }).count();
38
おっと。これらの38のドキュメントは、おそらく意図的にではなく、インデックスが付けられています。