2012-11-26 14 views
5

Ho una collezione che ha un nome utente come un campo. Il modello definisce questo campo come unico. Tuttavia sono stato in grado di inserire un valore duplicato nel database.mongoid indice univoco consentito valori duplicati

class Profile 
    include Mongoid::Document 
    include Mongoid::Paperclip 

    field :username 
    index({ username: 1 } , { unique: true }) 
end 

la collezione è comunque 2 nomi utente che sono gli stessi

{ "_id" : ObjectId("50b3b323421aa95da6000004"), 
    "username" : "marceloreuse" } 

{ "_id" : ObjectId("50b3b567421aa93d84000002"), 
    "username" : "marceloreuse" } 

Cosa è andato male qui?

+0

l'esempio mostra anche la stessa esatta ObjectId - è quella corretta o una copia/incolla di controllo? – kmfk

+0

il mio male ... quello era un problema di copia incolla – Amit

+0

Per curiosità - questa non è una raccolta collettiva, vero? – kmfk

risposta

9

Vorrei ricontrollare gli indici - dalla console prova db.collection.getIndexes() e assicurati che l'indice sia presente.

Nel caso in cui l'abbiate perso, Mongoid non crea automaticamente l'indice perché lo avete specificato - è necessario eseguire l'incluso: rake db:mongoid:create_indexes.

+0

fantastica! che funzioni! grazie – Amit

+0

Tuttavia, mongoid continua a non generare un errore quando si aggiunge una voce duplicata. La voce non è stata aggiunta, ma mongoid non sta dando alcun errore. – Amit

+0

Ciò è dovuto al "problema di scrittura" predefinito in MongoDB - il driver non aspetterà una risposta - il che significa che devi chiamare 'getLastError' o cambiare le tue impostazioni di persistenza' persist_in_safe_mode'. Dai un'occhiata a [Mongoid: Persistenza - Modalità sicura] (http://two.mongoid.org/docs/persistence/safe_mode.html). – kmfk

Problemi correlati