mongoose – 引起:: 11000 E11000重复键错误索引?

为什么我得到这个重复的错误 – Error creating new user: WriteError({"code":11000,"index":0,"errmsg":"insertDocument :: caused by :: 11000 E11000 duplicate key error index

所有提供的字段都不是空的。

架构:

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

post:

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

错误:

创build新用户时出错:{“code”:11000,“index”:0,“errmsg”:“insertDocument ::引起:: 11000 E11000重复键错误索引:iotdb.users。$ name_1 dup键: “}”op“:{”username“:”tealou“,”password“:”$ 2a $ 10 $ 7mPGND2FRuJDGnXaVTnkru2.xsGn2Ksf8veBKur4ouD9VUNj60RaC“,”_ id“:”5786020088245d33140d6f94“,”created_on“:”2016-07-13T08: 55:28.279Z”, “__ v”:0}})

有任何想法吗?

您最初在模式中有一个名为name的字段,它被设置为unique

我怎么知道? 由于错误告诉我这样:

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

您将该字段重命名为username ,但未删除旧的索引。 默认情况下,在这种情况下,MongoDB会将一个不存在的字段的值设置为null

相关文档在这里 :

如果文档在唯一索引中没有索引字段的值,则索引将为该文档存储空值。 由于唯一的约束,MongoDB将只允许一个缺less索引字段的文档。

要解决这个问题,你需要删除重name字段的索引。