Pisahkan istilah penelusuran menurut kata, dan pisahkan menggunakan operator alternatif ('|').
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');
Untuk masukan 'John Smith'
, ini akan membuat regex yang terlihat seperti /John|Smith/ig
. Ini akan mengembalikan true untuk kata-kata individual serta berfungsi ketika inputnya hanya 'John Sm'
Anda dapat bermain-main dengan regex ini untuk mendapatkan satu lagi yang sesuai dengan kebutuhan Anda.
EDIT:
Masalahnya di sini adalah bahwa bidang nama Anda terpisah. Dalam hal ini, menerapkan regex yang sama ke kedua bidang tidak akan menghasilkan hasil yang Anda inginkan. Ekspresi reguler harus diterapkan ke bidang yang sama dengan nama lengkap.
Solusi yang mungkin adalah menggunakan agregasi:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})