Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: peib0l en 21 Marzo 2015, 21:24 PM

Título: MongoDB problema con campo unique [Solucionado]
Publicado por: peib0l en 21 Marzo 2015, 21:24 PM
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?
Título: Re: MongoDB problema con campo unique [Solucionado]
Publicado por: peib0l en 22 Marzo 2015, 10:30 AM
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.
Título: Re: MongoDB problema con campo unique [Solucionado]
Publicado por: EFEX en 22 Marzo 2015, 11:03 AM
Código (bash) [Seleccionar]

> 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..