mongoose-unique-validator
Comment utiliser ce plugin:
1) npm install --save mongoose-unique-validator
2) dans votre schéma, suivez ce guide:
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
exampleSchema.plugin(uniqueValidator);
3) méthodes de mangouste
Lorsque vous utilisez des méthodes comme findOneAndUpdate
vous devrez passer cet objet de configuration:
{ runValidators: true, context: 'query' }
ie. User.findOneAndUpdate(
{ email: 'old-email@example.com' },
{ email: 'new-email@example.com' },
{ runValidators: true, context: 'query' },
function(err) {
}
4) options supplémentaires
insensible à la casse
utilisez l'option uniqueCaseInsensitive dans votre schéma
ie. email: { type: String, index: true, unique: true, required: true, uniqueCaseInsensitive: true }
messages d'erreur personnalisés
ie. exampleSchema.plugin(uniqueValidator, { message: 'Error, expected {PATH} to be unique.' });
Vous pouvez maintenant ajouter / supprimer la propriété unique à vos schémas sans vous soucier du redémarrage de mongo, de la suppression de bases de données ou de la création d'index.
Mises en garde (tirées de la documentation):
Étant donné que nous nous appuyons sur des opérations asynchrones pour vérifier si un document existe dans la base de données, il est possible que deux requêtes s'exécutent en même temps, toutes les deux récupèrent 0, puis les deux s'insèrent dans MongoDB.
En dehors du verrouillage automatique de la collection ou du forçage d'une seule connexion, il n'y a pas de vraie solution.
Pour la plupart de nos utilisateurs, ce ne sera pas un problème, mais c'est un cas extrême dont il faut être conscient.