下面是我的用户模式在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中有一个条目


当前回答

我有一个类似的问题,我意识到默认情况下mongo只支持每个集合一个模式。要么将新模式存储在不同的集合中,要么删除当前集合中模式不兼容的现有文档。或者找到一种方法,让每个集合拥有多个模式。

其他回答

在我的情况下,我只是忘记返回res.status(400)后找到该用户与req。电子邮件已经存在

我有一个类似的问题,我意识到默认情况下mongo只支持每个集合一个模式。要么将新模式存储在不同的集合中,要么删除当前集合中模式不兼容的现有文档。或者找到一种方法,让每个集合拥有多个模式。

检查收集索引。

我有这个问题,由于过时的索引收集字段,这应该由不同的新路径存储。

猫鼬添加索引,当你指定字段为唯一的。

在首先在保存时建立一些索引之后,从模式中删除属性也会出现同样的问题。从模式中删除属性会导致一个不存在的属性的空值,该属性仍然有索引。在这里,删除索引或从头开始一个新的集合会有所帮助。

注意:在这种情况下,错误消息将引导您。它有一条路径,但已经不存在了。我的情况下,旧的道路是…$uuid_1(这是一个索引!),但是新的是....* privi .uuid_1

基本上这个错误是说,你在一个特定的字段上有一个唯一的索引,例如:“email_address”,所以mongodb期望集合中的每个文档都有唯一的电子邮件地址值。

假设,在您的模式中,前面没有定义唯一索引,然后您使用相同的电子邮件地址或没有电子邮件地址(空值)注册了2个用户。

后来,你发现有个错误。因此,您尝试通过向模式添加唯一索引来纠正它。但是您的集合已经有重复的值,因此错误消息说您不能再次插入重复的值。

你基本上有三个选择:

删除集合 db.users.drop (); 找到具有该值的文档并删除它。假设该值为空,你可以使用以下命令删除它: db.users。Remove ({email_address: null}); 删除Unique索引: db.users.dropIndex (indexName)

我希望这对你有所帮助:)