English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB 포함 검색

이 장에서는 보완 쿼리를 배웁니다.

보완 쿼리는 무엇인가요?

MongoDB 공식 문서에 따르면, 보완 쿼리는 다음과 같은 쿼리입니다.-

  • 쿼리의 모든 필드는 인덱스의 일부입니다.

  • 쿼리에서 반환된 모든 필드는 동일한 인덱스에 포함되어 있습니다.

쿼리에 포함된 모든 필드가 인덱스의 일부라는 점을 감안하면, MongoDB는 쿼리 조건을 일치시키고, 실제 문서 내부를 확인하지 않고도 같은 인덱스를 사용하여 결과를 반환합니다. 인덱스가 RAM에 존재하기 때문에, 문서를 스캔하여 데이터를 가져오는 것보다 빨리 데이터를 가져올 수 있습니다.

보완 쿼리를 사용하여

검증할 쿼리를 확인하려면 다음을 참조하세요sers콜렉션에 포함된 다음 문서-

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

우선적으로 gender와 user_name 필드에서 users 콜렉션에 복합 인덱스를 생성하기 위해 다음 쿼리를 사용하겠습니다–

>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는 데이터베이스 문서를 확인하지 않습니다. 대신, 인덱스 데이터에서 필요한 데이터를 가져옵니다. 이는 매우 빠릅니다.

인덱스가 포함하지 않는 경우_id필드는, 따라서 우리는 그것을 쿼리 결과 집합에서 명시적으로 제거했습니다. MongoDB는 기본적으로 모든 쿼리에 대해 _id 필드를 반환하므로, 아래의 쿼리는 위에 생성된 인덱스에 포함되지 않습니다.

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

마지막으로, 기억해야 할 것은, 인덱스가 쿼리를 덮지 못할 경우

  • 모든 인덱스 필드는 배열입니다

  • 모든 인덱스 필드는 서브 문서입니다