문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

배열 필드에 인덱스 생성

이 페이지의 내용

  • 이 작업에 대하여
  • 절차
  • 결과
  • 자세히 알아보기

배열 값이 포함된 필드에 인덱스를 생성하여 해당 필드에 대한 쿼리 성능을 개선할 수 있습니다. 배열 값이 포함된 필드에 인덱스를 만들면 MongoDB는 해당 인덱스를 멀티키 인덱스로 저장합니다.

인덱스를 만들려면 db.collection.createIndex() 메서드를 사용합니다. 작업은 다음 프로토타입과 유사해야 합니다:

db.<collection>.createIndex( { <field>: <sortOrder> } )

이 페이지의 예에서는 이러한 문서가 포함된 students 컬렉션을 사용합니다.

db.students.insertMany( [
{
"name": "Andre Robinson",
"test_scores": [ 88, 97 ]
},
{
"name": "Wei Zhang",
"test_scores": [ 62, 73 ]
},
{
"name": "Jacob Meyer",
"test_scores": [ 92, 89 ]
}
] )

하나 이상의 90 보다 큰 test_score 가 있는 학생을 반환하는 쿼리를 정기적으로 실행합니다. 이 쿼리의 성능을 개선하기 위해 필드에 인덱스를 만들 수 있습니다.test_scores

다음 작업은 students 컬렉션의 test_scores 필드에 오름차순 다중 키 인덱스를 생성합니다.

db.students.createIndex( { test_scores: 1 } )

test_scores 에 배열 값이 포함되어 있으므로 MongoDB는 인덱스를 멀티키 인덱스로 저장합니다.

인덱스에는 test_scores 필드에 나타나는 각 개별 값에 대한 키가 포함되어 있습니다. 인덱스는 오름차순입니다. 즉, 키가 [ 62, 73, 88, 89, 92, 97 ] 순서로 저장됩니다.

인덱스는 test_scores 필드에서 선택하는 쿼리를 지원합니다. 예를 들어, 다음 쿼리는 test_scores 배열의 요소 중 하나 이상이 90보다 큰 문서를 반환합니다.

db.students.find(
{
test_scores: { $elemMatch: { $gt: 90 } }
}
)

출력:

[
{
_id: ObjectId("632240a20646eaee87a56a80"),
name: 'Andre Robinson',
test_scores: [ 88, 97 ]
},
{
_id: ObjectId("632240a20646eaee87a56a82"),
name: 'Jacob Meyer',
test_scores: [ 92, 89 ]
}
]
← Multikey 인덱스