カウントは必要ないため、最初の一致が見つかった後にクエリが返されることを確認する必要があります。カウントパフォーマンスは理想的ではないため、それはかなり重要です。次のクエリはそれを達成するはずです:
db.Collection.find({ /* criteria */}).limit(1).size();
find().count()
に注意してください デフォルトでは limit
を尊重する 句であるため、予期しない結果が返される可能性があります(すべての一致を検索しようとします)。 size()
またはcount(true)
制限フラグを尊重します。
極端な場合は、クエリでカバーされたインデックスが使用されていることを確認する必要があります。対象インデックスはインデックスにのみアクセスしますが、クエリを実行するフィールドにインデックスを付ける必要があります。 count()
であるため、一般的にはそれで十分です。 明らかにフィールドを返しません。それでも、カバーされたインデックスには、かなり詳細なカーソルが必要な場合があります:
db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();
{
// ...
"cursor" : "BtreeCursor value_1",
"indexOnly" : true, // covered!
}
残念ながら、count()
explain()
を提供していません ですから、それだけの価値があるかどうかはわかりません。いつものように、測定は理論よりも優れた仲間ですが、理論は少なくとも大きな問題からあなたを救うことができます。