Oddělte hledaný výraz slovy a oddělte je pomocí operátoru alternace ('|').
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');
Pro vstup 'John Smith'
, vytvoří se regulární výraz, který vypadá jako /John|Smith/ig
. Toto vrátí hodnotu true pro jednotlivá slova a také to bude fungovat, když je vstup pouze 'John Sm'
Můžete si hrát pomocí tohoto regulárního výrazu získáte další vhodný pro vaše potřeby.
EDIT:
Problém je v tom, že pole vašeho jména jsou oddělená. V tomto případě použití stejného regulárního výrazu na obě pole nepovede k požadovaným výsledkům. Regulární výraz je třeba použít na stejné pole s úplným názvem.
Možným řešením je použití agregace:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})