내장된 문서 전체에 인덱스를 생성할 수 있습니다. 그러나 전체 내장된 문서를 지정하는 쿼리만 인덱스를 사용합니다. 문서 내의 특정 필드에 대한 쿼리는 인덱스를 사용하지 않습니다.
이 작업에 대하여
내장된 문서에서 인덱스를 활용하려면 쿼리에 내장된 문서 전체를 지정해야 합니다. 스키마 모델이 변경되고 인덱스된 문서에서 필드를 추가하거나 제거하면 예기치 않은 동작이 발생할 수 있습니다.
내장된 문서를 쿼리 할 때는 쿼리 에서 필드를 지정하는 순서가 중요합니다. 쿼리 에 내장된 문서와 반환된 문서 가 정확히 일치해야 합니다. 내장된 문서에 대한 쿼리의 예를 보려면 내장된/중첩 문서에 대한 쿼리를 참조하세요.
내장된 문서에 인덱스를 작성하기 전에 해당 문서의 특정 필드를 인덱싱화해야 하는지 아니면 와일드카드 인덱스를 사용하여 문서의 모든 하위 필드를 인덱싱해야 하는지 고려합니다.
시작하기 전에
다음 문서가 포함된 students 컬렉션을 만듭니다.
db.students.insertMany( [ { "name": "Alice", "gpa": 3.6, "location": { city: "Sacramento", state: "California" } }, { "name": "Bob", "gpa": 3.2, "location": { city: "Albany", state: "New York" } } ] )
단계
location 필드에 인덱스를 만드는 방법은 다음과 같습니다.
db.students.createIndex( { location: 1 } )
결과
다음 쿼리는 location 필드의 인덱스를 사용합니다.
db.students.find( { location: { city: "Sacramento", state: "California" } } )
다음 쿼리는 내장된 문서 내의 특정 필드를 쿼리하므로 location 필드의 색인을 사용하지 않습니다.
db.students.find( { "location.city": "Sacramento" } ) db.students.find( { "location.state": "New York" } )
점 표기법 쿼리에서 인덱스를 사용하려면 내장된 객체 전체가 아니라 쿼리하는 특정한 내장된 필드에 대한 인덱스를 만들어야 합니다. 예시는 삽입된 필드에 인덱스 만들기에서 참조하세요.
다음 쿼리는 쿼리 술어에 포함된 필드가 문서에 표시되는 순서와 다른 순서로 지정되었기 때문에 결과를 반환하지 않습니다.
db.students.find( { location: { state: "California", city: "Sacramento" } } )