Mongodb-covered-queries
提供:Dev Guides
MongoDB-対象クエリ
この章では、対象クエリについて学習します。
対象クエリとは何ですか?
公式のMongoDBドキュメントによると、対象クエリは次のクエリです-
- クエリのすべてのフィールドはインデックスの一部です。
- クエリで返されるすべてのフィールドは同じインデックスにあります。
クエリに存在するすべてのフィールドはインデックスの一部であるため、MongoDBはクエリ条件に一致し、実際にドキュメント内を調べることなく同じインデックスを使用して結果を返します。 RAMにはインデックスが存在するため、ドキュメントをスキャンしてデータを取得するのに比べて、インデックスからデータを取得する方がはるかに高速です。
対象クエリの使用
カバーされたクエリをテストするには、 users コレクションの次のドキュメントを考慮してください-
{
"_id": ObjectId("53402597d852426020000002"),
"contact": "987654321",
"dob": "01-01-1991",
"gender": "M",
"name": "Tom Benzamin",
"user_name": "tombenzamin"
}
まず、次のクエリを使用して、フィールド gender および user_name の users コレクションの複合インデックスを作成します-
>db.users.ensureIndex({gender:1,user_name:1})
さて、このインデックスは次のクエリをカバーします-
>db.users.find({gender:"M"},{user_name:1,_id:0})
つまり、上記のクエリでは、MongoDBはデータベースドキュメントを調べません。 代わりに、インデックス付きデータから必要なデータをフェッチしますが、これは非常に高速です。
インデックスには _id フィールドが含まれていないため、MongoDBはデフォルトですべてのクエリで_idフィールドを返すため、クエリの結果セットから明示的に除外しています。 したがって、次のクエリは、上記で作成されたインデックス内ではカバーされませんでした-
>db.users.find({gender:"M"},{user_name:1})
最後に、インデックスはクエリをカバーできないことを覚えておいてください-
- インデックス付きフィールドのいずれかが配列です
- インデックス付きフィールドのいずれかがサブドキュメントです