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?
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
.
Abandonner la collection et permettre à mon code de le recréer est ce qui a fonctionné pour moi.