下面是我的用户模式在user.js模型-

var userSchema = new mongoose.Schema({
    local: {
        name: { type: String },
        email : { type: String, require: true, unique: true },
        password: { type: String, require:true },
    },
    facebook: {
        id           : { type: String },
        token        : { type: String },
        email        : { type: String },
        name         : { type: String }
    }
});

var User = mongoose.model('User',userSchema);

module.exports = User;

这就是我在控制器中使用它的方式

var user = require('./../models/user.js');

这就是我在数据库中保存它的方式

user({'local.email' : req.body.email, 'local.password' : req.body.password}).save(function(err, result){
    if(err)
        res.send(err);
    else {
        console.log(result);
        req.session.user = result;
        res.send({"code":200,"message":"Record inserted successfully"});
    }
});

错误- - - - - -

{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1  dup key: { : null }"} 

我检查了db集合,没有这样的重复条目存在,让我知道我做错了什么?

供您参考- req.body.email和req.body.password是抓取值。

我也检查了这篇文章,但没有帮助

如果我完全删除,然后它插入文档,否则它抛出错误“重复”错误,即使我在local.email中有一个条目


当前回答

我也遇到过这个问题,我解决了它。 此错误显示此处已经显示了电子邮件。因此,您只需要从Model for email属性中删除这一行。

unique: true

这是有可能的,即使它不起作用。所以只需要从MongoDB中删除集合并重新启动服务器。

其他回答

如果您仍然在开发环境中,我会删除整个db,并使用新的模式重新开始。

从命令行

➜ mongo
use dbName;
db.dropDatabase();
exit

当我在config/models.js中进行以下配置时,我也遇到了同样的问题

module.exports.models = {
  connection: 'mongodb',
  migrate: 'alter'
}

改变迁移从'alter'到'safe'固定它为我。

module.exports.models = {
  connection: 'mongodb',
  migrate: 'safe'
}

我也遇到过这个问题,我解决了它。 此错误显示此处已经显示了电子邮件。因此,您只需要从Model for email属性中删除这一行。

unique: true

这是有可能的,即使它不起作用。所以只需要从MongoDB中删除集合并重新启动服务器。

我也有同样的问题。尝试调试不同的方法都没有找到答案。我试过放弃这个系列,之后效果很好。尽管如果您的集合有很多文档,这不是一个好的解决方案。但是如果您处于开发的早期状态,请尝试删除集合。

db.users.drop();

我也遇到过类似的问题, 我只是清除特定字段的索引,然后它为我工作。 https://docs.mongodb.com/v3.2/reference/method/db.collection.dropIndexes/