sql >> データベース >  >> NoSQL >> MongoDB

マングース:正規表現でフルネームをクエリ

    検索語を単語で区切り、交互演算子('|')を使用して区切ります。

    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})
    



    1. Mongooseドキュメントのデフォルトの日付をnow+[いくらかの増分]に設定します

    2. MongoDBelemMatchが期待どおりに機能しない

    3. 複数の値を持つMongo$addToSet正しい構文

    4. mongodbカーソルからドキュメントのコレクションを取得するにはどうすればよいですか?