2012-07-08 2 views
5

나는 다음과 같은 링크를 저장하기 위해 노력하고있어 : MongoDB를 : 스파 스 값 독특하고 드문 드문 복합 인덱스

URL = { 
    hostname: 'i.imgur.com', 
    webid: 'qkELz.jpg' 
} 

나는이 두 필드에 독특하고 희소 복합 인덱스를 원하는을 이유로 :

  1. hostnamewebid의 조합은 고유해야합니다.
  2. webid은 항상 hostname으로 쿼리됩니다.
  3. webid은 전 세계적으로 고유 할 필요는 없습니다.
  4. URL에는 webid가 없어도됩니다. 일반 인덱스에, 그렇지 않은 반면,

    나는 복합 인덱스의 경우 추측
    MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1 dup key: { : "imgur.com", : null } 
    

    , 널 (null)이 계산됩니다 :이 작업을 수행 할 때

그러나, 나는 다음과 같은 오류가 발생합니다.

이 문제를 해결하려면? 지금은 hostnamewebid을 따로 색인화 할 예정입니다.

+1

을 (http://www.mongodb.org/display/DOCS/ 색인 # 색인 - 고유 한 % 3Atrue) (복합 또는 기타) 동일한 키를 사용할 수 없습니다. (hostname, null)을 사용하여 하나의 레코드를 삽입 할 수 있어야하지만 동일한 호스트 이름을 가진 두 번째 레코드는 중복됩니다. – Stennie

답변

4

mongodb는 쿼리 당 하나의 인덱스 만 사용할 수 있습니다 (별도의 인덱스가있는 두 필드에 대한 쿼리를 만들기 위해 함께 인덱스를 조인하지 않음).

즉, 고유성을 확인하려는 경우 삽입하기 전에 앱에서 쿼리를 수행 할 수 있습니다 (쿼리를 수행 할 때와 삽입 할 때 사이에 간격이 있기 때문에 부분적으로 만 문제가 해결됩니다).

당신은 아마 당신의 사용 사례에 도움이됩니다 필터링 된 인덱스이 JIRA 문제에 투표 할 수 있습니다 : [고유 색인] 들어 https://jira.mongodb.org/browse/SERVER-785

+0

오. 그렇다면 어떤 색인을 작성할지 결정하는 방법은 무엇입니까? 삽입하기 전에 이미 고유성이 있는지 확인합니다. –

+0

컬렉션 및 쿼리를 기반으로 선택한 두 가지 쿼리 계획이 있습니다. http://www.mongodb.org/display/DOCS/Optimization – ranman

관련 문제