Mongoose中的独特字段

时间:2017-02-06 18:37:58

标签: javascript node.js mongodb mongoose mongoose-schema

我试图在现有数据库中的mongoose模型上按字段强制执行唯一性。

const UserSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    unique: true,
  }
})

然后,当我使用已分配的电子邮件创建用户时,它会通过,我有2个用户使用相同的电子邮件。

我已阅读所有相关的SO答案> 2015年及所有约dropDupswhich is deprecated

我想我通过手动运行

解决了这个问题
db.users.createIndex({email:1}, {unique:true})

然而,这在开发和生产中显然变得很麻烦,特别是考虑到属性处理它的mongoose docs状态:

  

unique:boolean,是否在此属性上定义唯一索引。

考虑到现有的数据库和新的集合,有人可以提供一个明确的解决方案,以便在Mongoose模型上按字段强制执行唯一性吗?感谢

1 个答案:

答案 0 :(得分:1)

在创建唯一索引之前已经创建了两个用户。因此,您可以插入两个具有相同电子邮件的用户。您可以尝试下面的代码,它确保已创建所有索引:

UserModel.on('index', function(error) {
  const user1 = new UserModel({
    email: '3489'
  });

  const user2 = new UserModel({
    email: '3489'
  });
  user1.save(console.log);
  user2 .save(console.log);
});