2013-09-03 19 views
0

예를 들어 : 상점이라는 db 컬렉션이 있고 각 상점 문서에 판매하는 항목의 목록이 있고 상점에서 일반적으로 항목을 공유하는 경우 mongodb가 어떻게 인덱스를 작성합니까? 가능한 모든 항목에 대해 btree 색인을 작성한 다음 해당 트리의 각 리프 (각 항목)에 포함 된 문서를 참조 할 것입니까?mongodb 인덱스 목록은 무엇입니까

배경 :

db.store.find({merchandise:{$exists:true}}) // where 'merchandise' is a list 
db.store.find()[merchandise].count() 

이 '상품'에 대한 인덱스가 나에게 도움이 될 : 나는 인덱스를 사용하여이 같은 쿼리를 수행하기 위해 노력하고있어? 그렇지 않은 경우 '상품'크기에 별도의 메타 필드를 만들고 색인을 생성하는 유일한 방법은 무엇입니까?

스키마 : 당신이 상품에 대한 색인을 구축하면 문서 샘플에서

{ _id: 123456, 
    name: Macys 
    merchandise: [ 248651234564, 54862101248, 12450184, 1256001456 ] 
} 
+0

문서의 스키마를 공유 할 수 있습니까? – fgakk

+0

특정 검색어가 색인으로 지원되는지 여부를 알고 싶다면 [.explain()] (http://docs.mongodb.org/manual/reference/method/cursor.explain/)은 친구입니다. – Philipp

답변

1

그것이 multikey 인덱스되며 해당 인덱스가 배열의 모든 항목에있을 것입니다. here의 멀티 키 색인 섹션을 참조하십시오.

상품이 하위 문서의 배열 인 경우 상품에 대한 색인을 생성하면 배열의 하위 문서의 모든 필드에 색인이 배치됩니다. 인덱스를 사용하면 db.store.find ("상품": 248,651,234,564)와 같은 쿼리를 만들 수 있으며이 상품의 수를 얻기 위해 모든 문서를 가진 상품 248,651,234,564

를 검색합니다, 당신은 단지 얻을의 상품 필드의 크기를 얻을 수 있습니다 db.store.find() [index] .merchandise.length와 같은 하나의 문서. 따라서 상품 크기에 따라 쿼리를 실행하려면 상품 크기 및 색인에 별도의 필드를 만드는 것이 좋습니다.

희망이

1

을하는 데 도움이 당신 색인 multikey index에, 배열의 각 값을 개별적으로 배열, MongoDB의 인덱스를 포함하는 필드합니다. 배열 안에 4 개의 문서가 있으면 각 문서는 색인의 키 역할을하며 은 언급 된 문서을 가리 킵니다.

에 포함 된 개체의 인덱스 필드는 복수 키 인덱스 개로 사용할 수 있습니다. 즉, 배열에서 각 문서의 특정 필드를 인덱싱 할 수 있습니다. 예 : stuffs.thing : 1.

Read more about Multikey Indexes

당신은이 인덱스에 따라 달라 필요 여부 :

  • 특정 분야에 얼마나 많은 쿼리 의존?
  • 특정 필드 (배열)에 얼마나 많은 업데이트가 삽입 되었습니까?
  • 배열에 몇 개의 항목이 들어 있습니까?
  • ...

인덱스 느린 쓰기가 그들뿐만 아니라 업데이트가 필요로하는 것을 기억하십시오. 성능을 측정하기 위해 내 쿼리에서 explain을 고려할 것입니다.