2017-05-12 3 views
0

1 천만 데이터가있는 MongoDB 모음이 있습니다. 두 개의 기본 필드 domain (문자열 유형)과 level (정수 유형)이 있습니다. 두 필드 모두 인덱싱되지만 find 문 다음에 결과를 정렬 할 때 mongo는 결과를 반환하는 데 많은 시간을 할애하고 있습니다.검색 결과에서 mongo 문서를 정렬하는 방법

find 명령문에서 결과를 빨리 분류하는 방법은 무엇입니까? domain에 하나 level에 하나 귀하의 의견에서

db.collection.find({"domain":"DOMAIN_NAME"}).sort({"level":1}) 
+0

'Cr'이란 무엇입니까? 이 컬렉션은 파편인가요? –

+2

'.explain()'(https://docs.mongodb.com/manual/reference/method/cursor.explain/)을 사용하면 Mongo가 실제로 쿼리를 수행하는 방법을 알 수 있습니다. 일반적으로 인덱스가 좋은 첫 번째 단계입니다. 속도가 작동 함 – malarzm

+0

반환 결과에는 얼마나 많은 물체가 있습니까? mongo가 100,000 개의 문서를 정렬하려고하면 속도가 느려집니다. @ malarzm 설명에 아주 잘 가리 킵니다. 또한 실제로 필요하지 않은 필드를 제외하기위한 프로젝션을 살펴보십시오. 반환 할 데이터가 적습니다. => 더 빠른 쿼리. –

답변

0

, 당신이 두 개의 별도의 인덱스를 만들었습니다 나타납니다. 해당 인덱스와 쌍을 이루면 정렬을 지원하기 위해 이러한 인덱스를 결합 할 수 없습니다. the docs에서

다음 sort() 작업이 쿼리 조건에서 완전히 분리 인덱스를 필요로하는 경우

인덱스 교차가 적용되지 않습니다.

db.collection.createIndex({domain: 1, level: 1}) 

당신은 MongoDB에 대해 자세히 알아볼 수 있습니다 : 그것은 당신이 질의하고 무엇으로

대신, 먼저 domain 필드 두 필드를 포함하는 새로운 복합 인덱스를 추가해야합니다 인덱스 here.

관련 문제