Separera söktermen efter ord och separera dem med 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');
För ingången 'John Smith'
, kommer detta att skapa ett regex som ser ut som /John|Smith/ig
. Detta kommer att returnera sant för enskilda ord såväl som arbete när indata bara är 'John Sm'
Du kan leka runt med detta regex för att få en till som passar dina behov.
EDIT:
Problemet här är att dina namnfält är separata. Om du använder samma regex på båda fälten får du i det här fallet inte de resultat du vill ha. Regex måste tillämpas på samma fält med det fullständiga namnet.
En möjlig lösning är att använda aggregering:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})