MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose:interroga il nome completo con regex

Separa il termine di ricerca per parole e separale utilizzando un operatore di alternanza ('|').

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

Per l'input 'John Smith' , questo creerà una regex che assomiglia a /John|Smith/ig . Ciò restituirà true per le singole parole così come funziona quando l'input è solo 'John Sm'

Puoi giocare con questa regex per ottenerne una più adatta alle tue esigenze.

MODIFICA:

Il problema qui è che i campi del tuo nome sono separati. In questo caso, l'applicazione della stessa espressione regolare a entrambi i campi non darà i risultati desiderati. La regex deve essere applicata allo stesso campo con il nome completo.

Una possibile soluzione sta usando l'aggregazione:

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