How to Validate Unique Emails with Mongoose

Feb 4, 2021

With Mongoose, you can prevent duplicates in your databases using validation. Validation is defined in the SchemaType and is a middleware. You can also create your own validation in the schema or you can use Mongooses's built in validation. To prevent duplicates, we recommend using the unique property as it tells Mongoose each document should have a unique value for a given path. It is a shorthand for creating a MongoDB unique index on, in this case, email.

If you wait for the index to be built, you can you Mongoose's promised based event, Model.init(), as shown below:

const User = mongoose.model('User', mongoose.Schema({
  email: { 
    type: String,
    required: true,
    match: /.+\@.+\..+/,
    unique: true
  }
}));
await User.create([
    { email: 'gmail@google.com' },
    { email: 'bill@microsoft.com' },
    { email: 'test@gmail.com' }
]);

await User.init();
try {
  await User.create({ email: 'gmail@google.com' });
} catch(error) {
  error.message; // 'E11000 duplicate key error...'
}

It is important to note that the unique property is not a validator.


Want to become your team's MongoDB expert? "Mastering Mongoose" distills 8 years of hard-earned lessons building Mongoose apps at scale into 153 pages. That means you can learn what you need to know to build production-ready full-stack apps with Node.js and MongoDB in a few days. Get your copy!

More Mongoose Tutorials