2016-09-18 9 views
2

문서의 여러 필드를 검색해야하는 검색 기능을 사용하고 있습니다.몽구스 문서의 색인 생성

나는 다음과 같은 경우가 있습니다

1) 필드 1은, FIELD2, FIELD3는 문자열 (nayyar)

2) 모든 문서 필드 1, FIELD2, FIELD3, 입력란 4 일치를 가져 오기를 입력란 4 일치하는 모든 문서를 가져옵니다 문자열 (nayyar) AND gender는 (입력 값) 또는 'N/A'여야합니다.

3) field1, field2, field3, field4가 문자열 (nayyar)과 일치하는 모든 문서를 가져오고 age는 ageHigh와 ageLow 사이 여야하며 AND gender는 (입력 값) 또는 'N/A'여야합니다.

4) field1, field2, field3, field4가 문자열 (nayyar)과 일치하는 모든 문서 가져 오기 AND age는 ageHigh와 ageLow 사이 여야하며 AND gender는 (입력 값) 또는 'N/A'여야하고 ArrayField는 'atoz '.

var Schema = new Schema({ 
lowAge   : { 
         type: Number, 
         default: 0 
        }, 
highAge   : { 
         type: Number, 
         default: 0 
        }, 
gender   : { 
         type: String, 
         default: 'N/A' 
        }, 
field1   : { 
         type: String 
        }, 
field2   : { 
         type: String 
        }, 
field3   : { 
         type: String 
        }, 
field4   : { 
         type: String 
        }, 
arrayField  : { 
         type: [String] 
        } 
}); 


Schema.index({field1:1, field2:1, field3:1, field4:1}); 
Schema.index({field1:1, field2:1, field3:1, field4:1, arrayField:1,lowAge:1, highAge:1, gender:1,}); 

색인을 생성하는 올바른 방법입니까?

답변

2

먼저 필드에 색인을 만드는 아이디어는 괜찮은 것 같습니다. 그러나 쿼리에 사용 된 모든 가능한 필드에 인덱스를 만드는 것은 올바르지 않습니다.

게시물에 나열된 모든 쿼리는 4 개의 필드를 포함합니다. 이 4 개의 필드 모두에 복합 인덱스를 작성하면 충분하다고 생각합니다.

또한 스키마 수준에서 인덱스를 정의합니다. 응용 프로그램이 시작되면 Mongoose는 스키마의 각 정의 된 인덱스에 대해 ensureIndex를 자동으로 호출합니다. 이는 성능에 약간의 영향을 줄 수 있습니다.

는 다음과 같은 고려해야합니다 -

1) 단일 필드 인덱스 즉 네 개의 인덱스 각 필드에 하나를 만드는.

예 :이 옵션

db.collection.createIndex({field1 : 1}); 

이동 당신도 필드 1, FIELD2, 하나 개 이상의 필드의 FIELD3 또는 입력란 4 또는 조합하여 문서를 찾을해야합니다.

이 옵션에서 색인은 독립적입니다. MongoDB는 항상 색인 (즉, 색인 중 하나)을 사용하여 끝납니다.

2) 복합 지수는 즉 네 개의 필드

하나의 인덱스를 생성

예 :이 옵션

db.collection.createIndex({field1 : 1, field2 : 1, field3 : 1, field4 :1}); 

이동 당신은 항상 필드 1을했을 경우.

어떤 시나리오에서라도 field1이 없으면 MongoDB는 index를 사용하지 않습니다.

+0

나는 스크립트를 실행하여 한 번에 컬렉션을 만들 예정입니다. 따라서 데이터를 삽입하는 동안의 성능은 문제가되지 않습니다. 네, 모든 경우에 네 개의 필드가 있고 다른 필드는 다른 경우가 있습니다. 나이와 성별 필드에 지수를 추가하지 않으면 실적에 영향을 미칩니 까? 나는 250,0000 개의 문서를 질의해야합니다. –

+0

네 개의 필드로 데이터를 필터링 한 후에 250,000 문서가 없다고 가정합니다.당신은 합계의 작은 부분 집합을 가질 것이고, 일반적으로 MongoDB는 인덱스없이 그것을 처리 할 수 ​​있어야합니다. 문서의 모든 필드가 색인에 추가 된 것을 본 적이 없습니다. 확실히, 이것은 정확하지 않습니다. – notionquest

+0

시간 내 주셔서 감사 드리며 정말로 도움이됩니다. –