мангуст уникальный-валидатор
Как использовать этот плагин:
1) npm install --save mongoose-unique-validator
2) в вашей схеме следуйте этому руководству:
// declare this at the top
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
// exampleSchema = mongoose.Schema({}) etc...
exampleSchema.plugin(uniqueValidator);
// module.exports = mongoose.model(...) etc....
3) мангустные методы
При использовании таких методов, как findOneAndUpdate
, вам необходимо передать этот объект конфигурации:
{ runValidators: true, context: 'query' }
ie. User.findOneAndUpdate(
{ email: 'old-email@example.com' },
{ email: 'new-email@example.com' },
{ runValidators: true, context: 'query' },
function(err) {
// ...
}
4) дополнительные опции
без учета регистра
используйте параметр uniqueCaseInsensitive в вашей схеме
ie. email: { type: String, index: true, unique: true, required: true, uniqueCaseInsensitive: true }
пользовательские сообщения об ошибках
ie. exampleSchema.plugin(uniqueValidator, { message: 'Error, expected {PATH} to be unique.' });
Теперь вы можете добавлять / удалять уникальные свойства в своих схемах, не беспокоясь о перезапуске mongo, удалении баз данных или создании индексов.
Предостережения (из документов):
Поскольку мы полагаемся на асинхронные операции, чтобы проверить, существует ли документ в базе данных, два запроса могут выполняться одновременно, оба возвращают 0, а затем оба вставляются в MongoDB.
За исключением автоматической блокировки коллекции или форсирования одного соединения, реального решения не существует.
Для большинства наших пользователей это не будет проблемой, но это крайний случай, о котором следует знать.