2015-01-06 2 views
1

MongoDB에 저장하고 쿼리하려고하는 거대한 이메일 덤프가 있습니다. 내가 효율적으로 모든 이메일 "같은 것들을 찾아 볼 수 있어야합니다MongoDB에서 객체의 배열 인덱싱

{ 
    "text" : "This is the text of my email", 
    "subject" : "Great opportunity", 
    "from" : [ 
     { 
      "address" : "[email protected]", 
      "name" : "Chris Wilson" 
     } 
    ], 
    "to" : [ 
     { 
      "address" : "[email protected]", 
      "name" : "Person A" 
     }, 
     { 
      "address" : "[email protected]", 
      "name" : "Person B" 
     }, 
     { 
      "address" : "[email protected]", 
      "name" : "Person C" 
     } 
    ], 
    "date" : ISODate("2015-01-05T21:38:55.000Z") 
} 

: 좋은 자바 스크립트 객체로 원시 이메일을 구문 분석 때문에 같은 Node module에서 출력으로 저장되어있는 각각의 1.6M 이메일이있다 [email protected]에게 전송 "또는"Chris Wilson '이 보낸 모든 이메일 (어떤 이메일 주소가 해당 이름에 첨부되었는지에 관계없이).

db.emails.find({ "to.name": "Person A" }) 

이 덮여 쿼리입니다 : 나는이 작업을 수행 할 때 쿼리가 작동

몽고은 "을"과 "에서"쿼리 나를 위해 인덱스에 완벽하게 기꺼이, 그러나 나는 확실하지 않다 키 - 값 객체의 배열 인 필드에서 특정 속성의 특정 값을 찾으려면? 이 쿼리는 나를 위해 매우 느리게 실행되고 있지만 다시 큰 코퍼스입니다. 네, 완벽하게 괜찮

{ 
    "cursor" : "BasicCursor", 
    "isMultiKey" : false, 
    "n" : 24, 
    "nscannedObjects" : 1646837, 
    "nscanned" : 1646837, 
    "nscannedObjectsAllPlans" : 1646837, 
    "nscannedAllPlans" : 1646837, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 17088, 
    "nChunkSkips" : 0, 
    "millis" : 84685, 
    "server" : "DCA-TM-GUEST-iMac.local:27017", 
    "filterSet" : false 
} 

답변

0

:

UPDATE

다음은 위의 질의에 ".explain"를 추가의 출력입니다. 그래도 검색어를 효율적으로 사용하려면 to.name에 대한 색인이 필요합니다. 현재 BasicCursor을 사용한다는 사실은 색인이 없거나 색인이 사용되지 않음을 나타냅니다. 이는 다소 이상합니다. 참고로 'multikeys'이라고합니다.

이 [...] 당신이 무슨 뜻의 의미에서 '적용'생각

는 "MongoDB의 적용이 기능은"지붕이 쿼리인가? 'Covered Query'는 인덱스만을 사용하여 응답 할 수있는 쿼리에 사용되는 용어입니다. 반환하려는 모든 필드가 색인의 일부인 경우에만 쿼리에서 인덱스를 처리 할 수 ​​있습니다 (예 : ID를 제공하고 John Doe에게 보낸 전자 메일의 ID 만 제공).하지만 이는별로 의미가 없습니다. 나는이 컨텍스트를 추측한다. 또한 슬프게도 not supported when reaching into documents입니다.

+1

"to.name"에 대한 인덱싱은 내가 필요한 것입니다. 감사합니다! –