2016-07-13 2 views
8

Warum bekomme ich diesen doppelten Fehler - Error creating new user: WriteError({"code":11000,"index":0,"errmsg":"insertDocument :: caused by :: 11000 E11000 duplicate key error index?Mongoose - verursacht durch :: 11000 E11000 doppelten Schlüsselfehlerindex?

Alle angegebenen Felder sind nicht leer.

Schema:

// 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} 
}); 

Beitrag:

// 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); 
     } 
    }) 
}); 

Fehler:

Error creating new user: WriteError({"code":11000,"index":0,"errmsg":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: iotdb.users.$name_1 dup key: { : null }","op":{"username":"tealou","password":"$2a$10$7mPGND2FRuJDGnXaVTnkru2.xsGn2Ksf8veBKur4ouD9VUNj60RaC","_id":"5786020088245d33140d6f94","created_on":"2016-07-13T08:55:28.279Z","__v":0}})

irgendwelche Ideen?

+1

Das klingt vielleicht ein bisschen offensichtlich, aber gibt es noch andere Benutzer in der Datenbank mit einem Benutzernamen von 'tealou'? – connorb

+0

gibt es alle bereit Daten mit gleichen Daten zur Verfügung .. –

Antwort

20

Sie hatten ursprünglich ein Feld namens name in Ihrem Schema, das auf unique festgelegt wurde.

Woher weiß ich das? Wegen des Fehlers sagt mir so:

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

Sie das Feld zu username umbenannt, aber nicht dem alten Index entfernen. Standardmäßig legt MongoDB in diesem Fall den Wert eines nicht vorhandenen Feldes auf null fest.

Relevante Dokumentation here:

If a document does not have a value for the indexed field in a unique index, the index will store a null value for this document. Because of the unique constraint, MongoDB will only permit one document that lacks the indexed field.

Um dies zu lösen, müssen Sie den Index für das umbenannt name Feld entfernen.

+0

Sie haben Recht. Ich löschte das manuell 'db.users.dropIndex ({" name ": 1})' und lief den Beitrag wieder, dann funktioniert es wie ein Charme! – laukok

+0

Alter. einfach genial :) –

+0

Das war etwas Sherlock Holmes Level-Debugging –

0

Das Löschen der Sammlung und das Wiederherstellen meines Codes durch meinen Code hat für mich funktioniert.

Verwandte Themen