2012-07-08 7 views
5

Próbuję zapisać następujący link:MongoDB: Unikalne i rzadki związek z wartościami indeksów nielicznych

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

chcę wyjątkowy i rzadki indeks związku na tych dwóch obszarach, ponieważ:

  1. Połączenie hostname i webid powinno być unikalne.
  2. webid będzie zawsze sprawdzane pod numerem hostname.
  3. webid nie musi być unikalny globalnie.
  4. A URL Nie trzeba mieć przeglądarki internetowej.

Jednak, kiedy to zrobić, pojawia się następujący błąd:

MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1 dup key: { : "imgur.com", : null } 

Chyba w przypadku indeksów złożonych, null są liczone, podczas gdy w zwykłych indeksów nie są.

Jakieś wyjście z tego problemu? Na razie zamierzam osobno indeksować hostname i webid.

+1

Dla [unikalnych indeksów] (http://www.mongodb.org/display/DOCS/ Indeksy # Indeksy - unikalne% 3Atrue) (złożone lub nie) nie można mieć identycznych kluczy. Powinieneś być w stanie wstawić pojedynczy rekord z (nazwa hosta, null), ale drugi z identyczną nazwą hosta będzie duplikatem. – Stennie

Odpowiedz

4

Należy pamiętać, że mongodb może używać tylko jednego indeksu na zapytanie (nie będzie on łączyć indeksów razem, aby utworzyć zapytanie na dwóch polach, które mają oddzielne indeksy szybciej).

To powiedziawszy, jeśli chcesz spróbować sprawdzić unikalność, możesz wykonać zapytanie z aplikacji przed wstawieniem (co tylko częściowo rozwiązuje problem, ponieważ istnieje luka między zapytaniem a wstawieniem).

Możesz chcieć głosować w tej kwestii JIRA dla filtrowanych indeksów, które prawdopodobnie pomogą sprawy zastosowanie: https://jira.mongodb.org/browse/SERVER-785

+0

oh. więc w jaki sposób decyduje o tym, który indeks ma działać? Już przed wprowadzeniem sprawdzam unikalność. –

+0

Ma kilka różnych planów kwerend, które wybiera na podstawie kolekcji i kwerendy: http://www.mongodb.org/display/DOCS/Optimization – ranman

Powiązane problemy