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" }
마지막으로, 인덱스는 다음과 같은 경우 쿼리를 포함 할 수 없음을 기억하십시오.
- 인덱싱 된 필드는 배열입니다.
- 인덱싱 된 필드는 모두 하위 문서입니다.