validador único de mangusto
Como usar este plugin:
1) npm install --save mongoose-unique-validator
2) em seu esquema, siga este guia:
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
exampleSchema.plugin(uniqueValidator);
3) métodos de mangusto
Ao usar métodos como findOneAndUpdate
você, você precisará passar este objeto de configuração:
{ runValidators: true, context: 'query' }
ie. User.findOneAndUpdate(
{ email: 'old-email@example.com' },
{ email: 'new-email@example.com' },
{ runValidators: true, context: 'query' },
function(err) {
}
4) opções adicionais
não diferencia maiúsculas de minúsculas
use a opção uniqueCaseInsensitive em seu esquema
ie. email: { type: String, index: true, unique: true, required: true, uniqueCaseInsensitive: true }
mensagens de erro personalizadas
ie. exampleSchema.plugin(uniqueValidator, { message: 'Error, expected {PATH} to be unique.' });
Agora você pode adicionar / excluir a propriedade exclusiva de seus esquemas sem se preocupar em reiniciar o mongo, descartar bancos de dados ou criar índices.
Advertências (dos documentos):
Como contamos com operações assíncronas para verificar se um documento existe no banco de dados, é possível que duas consultas sejam executadas ao mesmo tempo, ambas obtêm 0 de volta e, em seguida, são inseridas no MongoDB.
Além de bloquear automaticamente a coleção ou forçar uma única conexão, não há solução real.
Para a maioria de nossos usuários, isso não será um problema, mas é um caso extremo a ser considerado.