web-dev-qa-db-fra.com

Mongoose - provoqué par :: 11000 E11000, indice d'erreur de clé en double?

Pourquoi ai-je cette erreur en double - Error creating new user: WriteError({"code":11000,"index":0,"errmsg":"insertDocument :: caused by :: 11000 E11000 duplicate key error index?

Tous les champs fournis ne sont pas vides du tout.

Schéma:

// Declare schema
var userSchema = new mongoose.Schema({
    username: {type: String, required: true, index: {unique: true}},
    password: {type: String, required: true},
    created_on: {type: Date, default: Date.now}
});

Poster:

// Create - POST
// Create the first method of the API : POST used to create a new user.
router.post("/", function(req, res, next) {
    // Get values from POST request
    var username = req.body.username;
    var password = req.body.password;
    console.log(req.body); // { username: 'tealou', password: 'test123' }

    // Create new user document
    User.create({
        username: username,
        password: password
    }, function(err, user) {
        console.log(user); // undefined
        if (err) {
            console.log("Error creating new user: " + err);
            res.send("Error creating new user.");
        } else {
            console.log("POST creating new user: " + username);
            res.json(user);
        }
    })
});

Erreur:

Erreur lors de la création d'un nouvel utilisateur: WriteError ({"code": 11000, "index": 0, "errmsg": "insertDocument :: cause Par: 11000 E11000 index d'erreur de clé en double: iotdb.users. $ Name_1 dup Clé: { : null } "," op ": {" nom d'utilisateur ":" tealou "," mot de passe ":" $ 2a $ 10 07-13T08: 55: 28.279Z "," __ v ": 0}})

des idées?

9
laukok

Vous aviez initialement un champ appelé name dans votre schéma, qui était défini sur unique.

Comment puis-je savoir? A cause de l'erreur me le dit:

duplicate key error index: **iotdb.users.$name_1**

Vous avez renommé le champ username, mais n'avez pas supprimé l'ancien index. Par défaut, MongoDB définira la valeur d'un champ inexistant sur null dans ce cas.

Documentation pertinente ici :

Si un document n'a pas de valeur pour le champ indexé dans un index unique, l'index stockera une valeur null pour ce document. En raison de la contrainte unique, MongoDB n'autorise qu'un seul document sans le champ indexé.

Pour résoudre ce problème, vous devez supprimer l'index du champ renommé name.

24
robertklep

Abandonner la collection et permettre à mon code de le recréer est ce qui a fonctionné pour moi.

1
Janac Meena