2015-04-20 11 views
5

Sto usando mongoDB shell with version 3.0.2 Sto cercando di garantire un vincolo di univocità su un campo username nella raccolta users.dropDups true not working mongodb

Questo è quello che ho dato:

db.users.ensureIndex({"username": 1},{unique: true}) 

mi ha dato errore seguente:

{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "errmsg" : "exception: E11000 duplicate key error index: mybackend.users.$username_1 dup key: { : \"rahat\" }", 
    "code" : 11000, 
    "ok" : 0 
} 

Poi ho usato, dropDups: true nel comando:

db.users.ensureIndex({"username": 1},{unique: true, dropDups: true}) 

Anche allora ottengo lo stesso errore:

{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "errmsg" : "exception: E11000 duplicate key error index: mybackend.users.$username_1 dup key: { : \"rahat\" }", 
    "code" : 11000, 
    "ok" : 0 
} 

Ho visto anche this SO link ma qui aveva già un indice. Il mio non ce l'ha.

db.users.getIndexes() ->

[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "mybackend.users" 
    } 
] 

ho cercato this issue on github e riavviato il Mongo, ma senza alcun uso. Che cosa sto facendo di sbagliato? Penso che sto facendo un errore stupido. Per favore aiuto.

risposta

9

La funzionalità di eliminazione duplicati nella creazione dell'indice non è più supportata dalla versione 3.0 di Mongo. Vedi the compatibility changes page per la versione 3.0.

+0

capito. Grazie, questo era quello che sospettavo potrebbe essere la ragione per il problema. Dato che non supporta 'dropDups', ci sono altri problemi o dobbiamo eliminare manualmente i record duplicati? – inquisitive

+0

Non sono a conoscenza di nient'altro che un lavoro manuale, mi dispiace. –

+0

Il driver più recente di Node-js mongodb lo mostra ancora sui documenti http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#createIndex –