sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose:fråga fullständigt namn med regex

Separera söktermen efter ord och separera dem med en alterneringsoperator ('|').

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

För ingången 'John Smith' , kommer detta att skapa ett regex som ser ut som /John|Smith/ig . Detta kommer att returnera sant för enskilda ord såväl som arbete när indata bara är 'John Sm'

Du kan leka runt med detta regex för att få en till som passar dina behov.

EDIT:

Problemet här är att dina namnfält är separata. Om du använder samma regex på båda fälten får du i det här fallet inte de resultat du vill ha. Regex måste tillämpas på samma fält med det fullständiga namnet.

En möjlig lösning är att använda aggregering:

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



  1. MongoDB sortera efter finns endast post, nyckel med värde först och nyckel med null eller inte finns sist

  2. Hur växlar man ett booleskt fält i ett dokument med atomär drift?

  3. Ember data multi-nivå hierarki med inbäddad alltid

  4. beräknande medelvärde i Mongoose