Separe el término de búsqueda por palabras y sepárelos usando un operador de alternancia ('|').
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');
Para la entrada 'John Smith'
, esto creará una expresión regular que se parece a /John|Smith/ig
. Esto devolverá verdadero para palabras individuales y funcionará cuando la entrada sea solo 'John Sm'
Puedes jugar con esta expresión regular para obtener una más adecuada a sus necesidades.
EDITAR:
El problema aquí es que los campos de su nombre están separados. En este caso, aplicar la misma expresión regular a ambos campos no dará los resultados que desea. La expresión regular debe aplicarse al mismo campo con el nombre completo.
Una posible solución es usar la agregación:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})