Javascript 唯一索引不适用于Mongoose架构

Javascript 唯一索引不适用于Mongoose架构,javascript,node.js,mongodb,mongoose,schema,Javascript,Node.js,Mongodb,Mongoose,Schema,我有这样的模式设置: 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

我有这样的模式设置:

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 }

});
似乎工作得很好,除了电子邮件字段允许重复,尽管有唯一的:真集。我做了以下工作:

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。但事实并非如此,它创建的新用户非常好,导致数据库中出现重复的电子邮件


为什么会发生这种情况?

mongo和mongoose将为您的文档分配一个自动id字段。通常这是_id。
尝试从架构中删除id以解决问题。

尝试以下操作:电子邮件:{type:String,required:true,index:{unique:true}}@RaxWunter不幸无效。整个数据库似乎忽略了唯一字段;查看是否存在阻止创建索引的错误。此外,如果以前电子邮件中存在非唯一索引,则需要手动删除该索引,以便将其重新创建为唯一索引。