MongoError, err: E11000 error de clave duplicada


Tengo un esquema MongoDB como este

    var User = new Schema({
    "UserName": { type: String, required: true },
    "Email": { type: String, required: true, unique: true },
    "UserType": { type: String },
    "Password": { type: String }
});

Estoy intentando crear un nuevo usuario Esto se hace en NodeJS usando mangosta ODM Y este es el código para crear:

    controller.createUser = function (req, res) {

    var user = new models.User({
        "UserName": req.body.UserName.toLowerCase(),
        "Email": req.body.Email.toLowerCase(),
        "UserType": req.body.UserType.toLowerCase()
    });
    models.User.findOne({ 'Email': user.Email }, function (err, olduser) {
                    if (!err) {
                        if (olduser) {
                            res.send({ 'statusCode': 409, 'statusText': 'Email Already Exists' });
                        }
                        else if (!olduser) {
                            user.setPassword(req.body.Password);
                            user.save(function (err, done) {
                                if (!err) {
                                    console.log(user);
                                    res.send({ 'statusCode': 201, 'statusText': 'CREATED' });
                                }
                                else {
                                    res.send({ 'Status code': 500, 'statusText': 'Internal Server Error' });
                                }
                            });
                        }
                    }
                    else {
                        res.send({ 'statusCode': 500, 'statusText': 'ERROR' });
                    }
                });
};

El para crear nuevo usuario, estoy dando atributos y valores de la siguiente manera:

 {
"UserName": "ann",
"Email": "[email protected]",
"UserType": "normaluser",
"Password":"123456"
}

Y estoy obteniendo un error como este:

{"Status code":500,"statusText":"Internal Server Error","Error":{"name":"MongoError","err":"E11000 duplicate key error index: medinfo.users.$UserName_1  dup key: { : \"ann\" }","code":11000,"n":0,"connectionId":54,"ok":1}}

Entiendo que este error se debe a que el nombre de usuario está duplicado ,pero No he establecido el nombre de usuario con restricción única.Cada vez que agrego una nueva fila, solo necesita que el correo electrónico sea único, el nombre de usuario se puede repetir.Cómo lograr esto??

Author: dany, 2012-11-19

4 answers

@ManseUK probablemente tenga razón, eso parece que UserName es una 'clave' - en este caso un índice. El atributo _id es el índice "primario" que se crea por defecto, pero mongodb le permite tener varios de ellos.

¿Iniciar una consola mongo y ejecutar medinfo.users.getIndexes()? Algo debe haber añadido un índice en 'UserName'.

required: true no haría eso, pero es posible que haya jugado con otros ajustes anteriormente y el índice no se ha eliminado?

 23
Author: rdrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-19 13:27:03

Debe haber un índice que esté bloqueando.

Puede probar la base de datos.colección.Método dropIndex ()

Medinfo.usuario.dropIndexes ()

 6
Author: Claude COULOMBE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-12 04:58:23

Lo que me había dado cuenta es que mis estructuras de datos estaban cambiando this aquí es donde versioning es útil.

Es posible que necesite obtener un módulo mongoose-version, hacer un thing.remove({}, ...) o incluso soltar la colección: soltar la base de datos con mangosta

Uso RoboMongo para una herramienta de administración (¡y lo recomiendo encarecidamente!) así que simplemente entré y hice clic con el botón derecho / dejé la colección desde la consola.

Si alguien sabe cómo fácilmente versión y / o soltar una colección desde dentro del código, no dude en publicar un comentario a continuación, ya que seguramente ayuda a este hilo (y yo:)).

 0
Author: Cody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:17

Tengo un problema similar en mi proyecto. Traté de borrar todos los documentos y el problema del dup sigue apareciendo. Hasta que dejé caer esta colección y reinicié mi servicio de nodo, simplemente funcionó.

 0
Author: wenqing yu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-08 06:50:20