sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose:dotaz na celé jméno s regulárním výrazem

Oddělte hledaný výraz slovy a oddělte je pomocí operátoru alternace ('|').

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');

Pro vstup 'John Smith' , vytvoří se regulární výraz, který vypadá jako /John|Smith/ig . Toto vrátí hodnotu true pro jednotlivá slova a také to bude fungovat, když je vstup pouze 'John Sm'

Můžete si hrát pomocí tohoto regulárního výrazu získáte další vhodný pro vaše potřeby.

EDIT:

Problém je v tom, že pole vašeho jména jsou oddělená. V tomto případě použití stejného regulárního výrazu na obě pole nepovede k požadovaným výsledkům. Regulární výraz je třeba použít na stejné pole s úplným názvem.

Možným řešením je použití agregace:

User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})



  1. Oznámení MongoDB v Pythonu

  2. Zavedení podpory transakcí do Cloudera Operational Database

  3. Jak zlepšit výkon vkládání MongoDB

  4. Mongoose:Nelze načíst souborové dokumenty z kolekce .chunk bez datového pole