2015-01-13 78 views
0

不工作我有一个架构设置是这样的:唯一索引猫鼬架构

var UserSchema = new Schema({ 
    id: {type: String, required: true, unique: true, index: true, default: mongoose.Types.ObjectId}, 

    name: { type: String, required: true }, 
    email: { type: String, required: true, unique: true, index: true }, 
    mobile: { type: String, unique: true, sparse: true }, 
    password: { type: String, required: true } 

}); 

似乎工作除了电子邮件场伟大在重复让,尽管有unique:true集。我做到以下几点:

User.create({ 
    name: req.body.name, 
    email: req.body.email, 
    mobile: req.body.mobile, 
    password: password 
}, function(err, user) { 
    if (err) return res.send({ invalid : true }); 
}); 

如果req.body.email是这是已经在数据库中的值,上面的查询应返回err。但事实并非如此,它会使新用户完美无缺,从而导致数据库中的电子邮件重复。

这是怎么发生的?

+0

试试这个:email:{type:String,required:true,index:{unique:true}} –

+0

@RaxWunter不幸的是没有工作。似乎整个数据库都忽略了唯一的字段。 – Coop

+0

添加'User.on('index',function(err){console.log(err);});'查看是否有错误导致索引无法创建。另外,如果以前在'email'上存在非唯一索引,则需要手动将其删除,以便将其重新创建为唯一索引。 – JohnnyHK

回答

0

mongo,因此mongoose会为您的文档分配一个自动ID字段。通常是“_id”。 尝试从您的模式中删除“id”以解决您的问题。