Separa il termine di ricerca per parole e separale utilizzando un operatore di alternanza ('|').
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');
Per l'input 'John Smith'
, questo creerà una regex che assomiglia a /John|Smith/ig
. Ciò restituirà true per le singole parole così come funziona quando l'input è solo 'John Sm'
Puoi giocare con questa regex per ottenerne una più adatta alle tue esigenze.
MODIFICA:
Il problema qui è che i campi del tuo nome sono separati. In questo caso, l'applicazione della stessa espressione regolare a entrambi i campi non darà i risultati desiderati. La regex deve essere applicata allo stesso campo con il nome completo.
Una possibile soluzione sta usando l'aggregazione:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})