мангуст-уникальный-валидатор
Как использовать этот плагин:
1) npm install --save mongoose-unique-validator
2) в своей схеме следуйте этому руководству:
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
exampleSchema.plugin(uniqueValidator);
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.
Помимо автоматической блокировки коллекции или принудительного установления единственного соединения, настоящего решения нет.
Для большинства наших пользователей это не будет проблемой, но это крайний случай, о котором следует знать.