두개 또는 그 이상의 검색 조건으로 정렬 할 때는 인덱스의 키 방향이 서로 달라야 한다.
즉, 복합 정렬을 서로 다른 방향으로 최적화 하기 위해서는 방향이 맞는 인덱스를 사용해야한다. (단일 정렬은 상관 없다.)
만약 users라는 컬렉션에 age와 username이 필드가 있다고 가정하자.
이 컬렉션에 대해서 age는 오름차순, username은 내림차순으로 정렬된값을 쿼리해야한다면 인덱스의 방향 또한 동일하게 맞춰야한다.
만약, 아래와 같은 인덱스만 존재한다면 정렬 방향을 맞춰 인덱스를 추가로 생성해줘야 한다.
{"age":1, "username":1}
->
{"age":1, "username":-1}
그리고 역방향 인덱스(각 방향에 -1을 곱한다.)는 서로 동등함을 알아두자.
{"age":1, "username":-1} 과 {"age":-1, "username":1}은 동일한 쿼리를 충족한다.
또한 앞서 설명했듯이 인덱스 방향은 다중 조건에 따라 정렬할때만 문제가 된다. 단일 키로 정렬하면 몽고DB는 인덱스를 쉽게 역순으로 읽을 수 있다.
예를 들어, {"age":-1}
로 정렬해야 하는데 {"age":1}
로 인덱스를 가질 때, 몽고DB는 {"age": -1}
로 인덱스를 가질 때 처럼 정렬을 최적화 할 수 있다. 그러니 둘다 생성하지 말자. 방향은 다중키로 정렬 할때만 문제가 된다.