Buenas tardes noches, llevo un día aprendiendo y programando con mongodb como base de mi aplicación, pero al intentar establecer un campo del documento único.. me ignora completamente.
La instrucción que ejecute es:
db.getCollection('usuarios').ensureIndex({"email":1},{"unique":true})
Pero al insertar más documentos con el mismo"email" no lo detecta como duplicado.
Necesito ayuda Urgente, que puede estar pasando? donde he cometido el fallo?
Al parecer desde la shell de mongo no me estaba reconociendo la orden, así que use RoboMongo (GUI de mongo) y lo típico, botón derecho en el indice -> edit index.. -> Pestaña basic y marcamos "unique" y si ya teníamos campos repetidos "Drop duplicates"
Espero que a alguien le sirva de ayuda.
> use test
switched to db test
> db.test.usuarios.insert({"nombre":"Nicolas","email":"nicolas@nothotmail.com"})
WriteResult({ "nInserted" : 1 })
> show collections
system.indexes
test.usuarios
> db.test.usuarios.createIndex({email:1},{unique:true})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.test.usuarios.insert({"nombre":"JuanPePe","email":"nicolas@nothotmail.com"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test.usuarios.$email_1 dup key: { : \"nicolas@nothotmail.com\" }"
}
})
> db.test.usuarios.insert({"nombre":"JuanPePe","email":"juanpep@suemail.com"})
WriteResult({ "nInserted" : 1 })
> db.test.usuarios.find()
{ "_id" : ObjectId("550e910df49799b8c6496cb8"), "nombre" : "Nicolas", "email" : "nicolas@nothotmail.com" }
{ "_id" : ObjectId("550e91a9f49799b8c6496cbc"), "nombre" : "JuanPePe", "email" : "juanpep@suemail.com" }
Tambien se puede especificar dropDups: true cuando creas el index y te borrara los duplicados.
http://docs.mongodb.org/manual/core/index-unique/
http://docs.mongodb.org/manual/core/index-creation/#drop-duplicates
Por ultimo creo que RoboMongo tiene consola, si la activa ves los cambios que hace..