À partir de MongoDB v1.8+, vous pouvez obtenir le comportement souhaité en garantissant des valeurs uniques mais en autorisant plusieurs documents sans le champ en définissant le sparse
option sur true lors de la définition de l'index. Comme dans :
email : {type: String, trim: true, index: true, unique: true, sparse: true}
Ou dans le shell :
db.users.ensureIndex({email: 1}, {unique: true, sparse: true});
Notez qu'un index unique et clairsemé n'autorise toujours pas plusieurs documents avec un email
champ avec une valeur de null
, uniquement plusieurs documents sans un email
champ.
Voir http://docs.mongodb.org/manual/core/index-sparse/