2014-12-04 12 views
6

Tak więc uaktualniam sterownik java MongoDB do 2.12.4, gdzie metoda ensureIndex() została uznana za przestarzałą. Zamiast tego używam metody createIndex(), która z dokumentów przypomina funciton podobnie jak ensureIndex(). Jednak gdy używam tej metody w produkcji, pojawia się następujący błąd -Indeks już istnieje z różnymi opcjami błąd podczas korzystania z createIndex() w najnowszym MongoDB java sterownik

{ "serverUsed" : "X.X.X.X" , "ok" : 0.0 , "errmsg" : "Index with name: <index_name> already exists with different options" , "code" : 85} 

Dlaczego tak się dzieje? Czy ktoś może mi w tym pomóc?

Dzięki

Odpowiedz

8

Spróbuj usunąć bieżące indeksy przed utworzeniem nowych.

Jeśli martwisz się o przestoje produkcyjne itp dla tych indeksów, można:

  1. Dodaj drugi indeks tak jak to masz na produkcję teraz z inną nazwą.
  2. usunąć istniejący jeden
  3. zrestartować serwer tak, że tworzony jest indeks w kodzie Javy jak oczekiwano
  4. usunąć indeks duplikat.
4

Czy odpowiedź Shaver jest bardzo dobra, jednak nie rozwiązuje problemu, który podkreśla gravetii.

createIndex zakończy się niepowodzeniem z tym błędem, jeśli próbujesz utworzyć indeks na tych samych polach, z tą samą kolejnością, ale z różnymi opcjami. Wynika to z faktu, że opcje indeksów mogą powodować, że indeks ma bardzo różne właściwości. Jest to oczywiste, gdy weźmiesz pod uwagę indeks z flagą unique.

Jeśli zadzwonisz pod numer createIndex z tymi samymi polami, tą samą kolejnością i tymi samymi opcjami, zachowasz się zgodnie z oczekiwaniami; nie wprowadzając żadnych zmian w indeksach kolekcji i nie rzuci wyjątku.

Powiązane problemy