Schéma Mongoose: Validation du champ unique, insensible à la casse
J'ai un userSchema
comme suit:
var userSchema = new Schema({
name: {
type: String
, required: true
, validate: [validators.notEmpty, 'Name is empty']
}
, username: {
type: String
, required: true
, unique: true
, validate: [validators.notEmpty, 'Username is empty']
}
});
La username
champ est censé être unique. Mangouste provoquera une erreur si ce nom d'utilisateur existe déjà dans la base de données. Cependant, il n'est pas insensible à la casse, j'en ai besoin pour être.
Suis-je en droit de penser que la seule façon de parvenir à une casse à cocher unique est d'écrire ma propre règle de validation, qui va effectuer une requête sur la collection? Est-il correct d'écrire des contrôles de validation comme cela, la création de plus de connexions à la collection? J'ai besoin de faire quelque chose de similaire pour email
trop.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Que penser de l'utilisation:
atteindre votre but?
Je ne sais pas si vous le faites dans le nœud. Mais vous pouvez utiliser un mnp comme ceci: https://github.com/blakehaswell/mongoose-unique-validator pour vérifier unique de validation sur les champs de collections. Autre façon serait de vérifier dans la collection chaque fois qu'une nouvelle demande.
http://timstermatic.github.io/blog/2013/08/06/async-unique-validation-with-expressjs-and-mongoose/
Vous pouvez consulter le matériel ici et de les utiliser de la façon qui convient à votre cas.
Le meilleur moyen est d'utiliser déjà existant mnp paquets partagés ci-dessous.
https://www.npmjs.com/package/mongoose-unique-validator
Pour le rendre sensible à la casse, vous pouvez suivre uniqueCaseInsensitive dans la même page.
Pas besoin d'écrire votre propre logique de validation lorsqu'il y a déjà un paquet disponible pour ce(suivez Avinash post trop).
Solution très simple
Ici, je suis asynchrone à l'aide de la validation et de la vérification dans mon modèle
student
si même domaine existent. Utiliser pouvez évidemment utiliser des regex si vous le souhaitez.Mais je ne recommande pas cette méthode, il ne s'intègre pas dans ma tête.
Au lieu de rester avec
{ type: String, lowercase: true, trim: true, unique:true }
approche et de copier le nom d'utilisateur original à un autre champ dans le cas où vous en avez besoin.Comment sur l'utilisation d'une expression régulière?
Pour de plus amples référence: http://mongoosejs.com/docs/api.html#schematype_SchemaType-required