検索語を単語で区切り、交互演算子('|')を使用して区切ります。
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');
入力'John Smith'
の場合 、これにより、/John|Smith/ig
のような正規表現が作成されます 。これは、個々の単語に対してtrueを返し、入力が'John Sm'
の場合に機能します。
遊んでください この正規表現を使用して、ニーズに合った正規表現を取得します。
編集:
ここでの問題は、名前フィールドが分離していることです。この場合、両方のフィールドに同じ正規表現を適用しても、希望する結果は得られません。正規表現は、完全な名前で同じフィールドに適用する必要があります。
考えられる解決策は、集計を使用することです:
User.aggregate()
.project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
.match({fullName: re})