Skip to content

Instantly share code, notes, and snippets.

@edinella
Last active September 12, 2016 17:42
Show Gist options
  • Save edinella/5819557 to your computer and use it in GitHub Desktop.
Save edinella/5819557 to your computer and use it in GitHub Desktop.
Mongoose uniqueness validator, case-sensitive or not
// context
var mongoose = require('mongoose');
mongoose.connect('mongodb://...');
/**
* Generates Mongoose uniqueness validator
*
* @param string modelName
* @param string field
* @param boolean caseSensitive
*
* @return function
**/
function unique(modelName, field, caseSensitive) {
return function(value, respond) {
if(value && value.length) {
var query = mongoose.model(modelName).where(field, new RegExp('^'+value+'$', caseSensitive ? 'i' : undefined));
if(!this.isNew)
query = query.where('_id').ne(this._id);
query.count(function(err, n) {
respond(n<1);
});
}
else
respond(false);
};
}
// usage:
var Account = mongoose.model('Account', {
// case insensitive
email: { type: String, required: true, validate: [unique('Account', 'email'), 'unique']}
// case sensitive
csfield: { type: String, required: true, validate: [unique('Account', 'csfield', true), 'unique']}
});
// inspirations
// http://mongoosejs.com/docs/validation.html
// http://fabianosoriani.wordpress.com/2012/03/22/mongoose-validate-unique-field-insensitive/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment