2011-06-29 12 views
6
db.hello.ensureIndex({"array1":1, "array2":1}) 

MongoDB na to nie pozwala, ponieważ mówi "może wymknąć się spod kontroli". Jednak wiem, że moje tablice nigdy nie przekroczą długości 3. Jak mogę zhakować MongoDB, aby umożliwić indeksowanie wielu tablic jednocześnie?Jak zindeksować dwie tablice w MongoDB?

Przy użyciu wskaźnika związek najwyżej jedną z wartości indeksowane w każdym dokumencie może być tablicą. Tak więc, jeśli ma wskaźnik na {A 1, B 1} następujące dokumenty są zarówno dobrze:

{A: [1, 2], B: 1} {A 1, B: [1, 2]} dokument, jednakże, nie być włożona za pomocą komunikatu o błędzie "nie można wskaźnik równoległe układy":

{a: [1, 2], b [1, 2 ]} Problem z równoległymi tablicami indeksującymi to: każda wartość w kartezjańskim produkcie indeksowanych kluczy złożonych musi być , co bardzo szybko może wymknąć się spod kontroli .

+0

Czy na pewno potrzebujesz indeksu na obu tablicach? Jeśli masz wysoką selektywność już na jednym z nich, może to być wystarczająco dobre. – Thilo

+0

@Thilo ... pierwsza tablica ma zwykle około 100 elementów. Druga tablica ma około 2-3 elementów. Czy uważasz, że muszę zaindeksować drugą tablicę? – TIMEX

+1

@ TIMEX Nie indeksuj drugiej tablicy i zobacz, jak działa za pomocą polecenia explain. – Joe

Odpowiedz

2

Krótka odpowiedź na twoje pytanie; ty nie. Jedyną dostępną opcją jest przechowywanie każdej unikatowej pary jako pojedynczego elementu tablicy. Więc zamiast:

{a:[1,2], b[8,9]} 

przechowywać

{ab:[[1,8], [1,9], [2,8], [2,9]]} 

Oczywiście to ma kilka wad, tak naprawdę zależy od konkretnego USECASE czy nie jest to odpowiedni obejście. Zgadzam się jednak, że mongo nie powinno odrzucać wielu indeksów tablicowych tylko po to, by zabezpieczyć się przed idiotami. Jest to dobra funkcja dla małych/niskich macierzy liczności.

Powiązane problemy