MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose:requête nom complet avec regex

Séparez le terme de recherche par mots et séparez-les à l'aide d'un opérateur d'alternance ('|').

var terms = req.params.search.split(' ');

var regexString = "";

for (var i = 0; i < terms.length; i++)
{
    regexString += terms[i];
    if (i < terms.length - 1) regexString += '|';
}

var re = new RegExp(regexString, 'ig');

Pour l'entrée 'John Smith' , cela créera une expression régulière qui ressemble à /John|Smith/ig . Cela renverra vrai pour les mots individuels ainsi que le travail lorsque l'entrée est juste 'John Sm'

Vous pouvez jouer avec cette expression régulière pour en obtenir une plus adaptée à vos besoins.

MODIFIER :

Le problème ici est que vos champs de nom sont séparés. Dans ce cas, l'application de la même expression régulière aux deux champs ne donnera pas les résultats souhaités. L'expression régulière doit être appliquée au même champ avec le nom complet.

Une solution possible consiste à utiliser l'agrégation :

User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})