2017-02-21 55 views
5

Komenda db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) kończy się niepowodzeniem w wersji mongo 3.4.2, ale nie 3.2.11. Dokumentacja mongo wskazuje, że wersja 3.4 obsługuje atrybuty unique i background.mongodb 3.4.2 InvalidIndexSpecificationOption error: Pole "unique" nie jest poprawne dla specyfikacji _id index

Mongo 3.4.2 zawiedzie ...

> use testDB 
switched to db testDB 
> db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) 
{ 
    "ok" : 0, 
    "errmsg" : "The field 'unique' is not valid for an _id index specification. Specification: { ns: \"testDB.testCollection\", v: 1, key: { _id: 1.0 }, name: \"_id_2\", unique: true, background: true }", 
    "code" : 197, 
    "codeName" : "InvalidIndexSpecificationOption" 
} 
> 

Mongo 3.2.11 działa ...

> use testDB 
switched to db testDB 
> db.testCollection.createIndex({ _id: 1 }, {name: "_id_2", unique: true, background: true}) 
{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "numIndexesAfter" : 1, 
    "note" : "all indexes already exist", 
    "ok" : 1 
} 
> 

ktoś wie o pracy w pobliżu?

Używamy opakowania Mongoose Node.js do tworzenia indeksów Mongo, więc nie dodawanie atrybutów unique i background nie jest opcją.

Pozdrawiam!

Ed

Odpowiedz

2

To wyjątkowy nie jest problemem tutaj .. To że _id, co już ma indeks (utworzony automatycznie) i nie mogą tworzyć drugi indeks co mają dokładnie te same pola (_id: 1) co pierwsza mieć.

Co powiesz na testowanie z innym polem niż _id, a przekonasz się, że unikatowe tło i jest możliwe, o ile pole to nie ma już indeksu.

+1

Dzięki J.Jussi, to wszystko. Nie zagłębiłem się w notatkę z 3.2.11, która wskazywała na zbędne żądanie indeksowania. To oczywiste, kiedy już to wskazałeś. – icedawn

1

w mongodb3.4, unikalny i tło nie są obsługiwane w polu _id, inne pola są możliwe.