MongoDB 고급 인덱싱
다음 문서 모음(사용자)을 고려하세요.
{ "address": { "city": "Los Angeles", "state": "California", "pincode": "123" }, "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" }
위 문서에는 주소 하위 문서와 태그 배열이 포함되어 있습니다.
인덱스 배열 필드
태그를 기반으로 사용자를 검색한다고 가정해 보겠습니다. 이를 위해서는 컬렉션의 배열 태그를 인덱싱해야 합니다.
배열에 인덱스를 생성하려면 배열의 각 필드를 차례로 인덱싱해야 합니다. 그래서 배열 태그에 대한 인덱스를 생성할 때 음악, 크리켓, 블로그의 세 가지 값에 대해 별도의 인덱스를 생성하게 됩니다.
다음 명령을 사용하여 배열 인덱스를 생성합니다.
>db.users.ensureIndex({"tags":1})
인덱스를 생성한 후 다음과 같이 컬렉션의 태그 필드를 검색할 수 있습니다.
>db.users.find({tags:"cricket"})
인덱스를 사용 중이라면 설명 명령을 사용할 수 있습니다:
>db.users.find({tags:"cricket"}).explain()
위 명령의 실행 결과는 "cursor": "BtreeCursor tagged_1"을 표시하며 이는 인덱스가 사용되었음을 의미합니다.
색인 하위 문서 필드
시, 주, 핀코드 필드를 통해 문서를 검색해야 한다고 가정해 보겠습니다. 이러한 필드는 하위 문서의 필드이므로 색인을 생성해야 합니다. 하위 문서 .
다음 명령을 사용하여 하위 문서의 세 필드에 대한 색인을 생성합니다.
>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
색인이 생성되면 하위 문서의 필드를 사용하여 데이터를 검색할 수 있습니다.
>db.users.find({"address.city":"Los Angeles"})
쿼리 표현식은 지정된 인덱스의 순서를 따라야 한다는 점을 기억하세요. 따라서 위에서 생성된 인덱스는 다음 쿼리를 지원합니다:
>db.users.find({"address.city":"Los Angeles","address.state":"California"})
또한 다음 쿼리도 지원합니다:
>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})