Adskil søgetermen efter ord, og adskil dem ved hjælp af en alterneringsoperator ('|').
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');
For input 'John Smith'
, vil dette skabe et regex, der ser ud som /John|Smith/ig
. Dette vil returnere sandt for individuelle ord såvel som arbejde, når input kun er 'John Sm'
Du kan lege rundt med dette regex for at få en mere, der passer til dine behov.
EDIT:
Problemet her er, at dine navnefelter er adskilte. I dette tilfælde vil anvendelsen af det samme regex på begge felter ikke resultere i de ønskede resultater. Regex skal anvendes på det samme felt med det fulde navn.
En mulig løsning er at bruge aggregering:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})