MongoDB-対象クエリ

この章では、対象となるクエリについて学習します。

対象クエリとは何ですか?

公式のMongoDBドキュメントによると、対象となるクエリは次のようなクエリです。

  • クエリのすべてのフィールドはインデックスの一部です。
  • クエリで返されるすべてのフィールドは同じインデックスにあります。

クエリに存在するすべてのフィールドはインデックスの一部であるため、MongoDBはクエリ条件に一致し、実際にドキュメントの内部を調べることなく、同じインデックスを使用して結果を返します。インデックスはRAMに存在するため、ドキュメントをスキャンしてデータをフェッチする場合に比べて、インデックスからデータをフェッチする方がはるかに高速です。

対象クエリの使用

対象となるクエリをテストするには、次のドキュメントを検討してください。 users コレクション−

{
   "_id": ObjectId("53402597d852426020000003"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

まず、の複合インデックスを作成します users フィールド上のコレクション gender そして user_name 次のクエリを使用する-

>db.users.createIndex({gender:1,user_name:1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

これで、このインデックスは次のクエリをカバーします-

>db.users.find({gender:"M"},{user_name:1,_id:0})
{ "user_name" : "tombenzamin" }

つまり、上記のクエリの場合、MongoDBはデータベースドキュメントを調べません。代わりに、非常に高速なインデックス付きデータから必要なデータをフェッチします。

私たちのインデックスには含まれていないので _idMongoDBはデフォルトですべてのクエリで_idフィールドを返すため、フィールドはクエリの結果セットから明示的に除外しました。したがって、次のクエリは、上記で作成されたインデックス内ではカバーされていません。

>db.users.find({gender:"M"},{user_name:1})
{ "_id" : ObjectId("53402597d852426020000003"), "user_name" : "tombenzamin" }

最後に、次の場合、インデックスはクエリをカバーできないことに注意してください。

  • インデックス付きフィールドのいずれかが配列です
  • インデックス付きフィールドのいずれかがサブドキュメントです