MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose:consulta o nome completo com regex


Separe o termo de pesquisa por palavras e separe-as usando um operador de alternância ('|').
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');

Para a entrada 'John Smith' , isso criará um regex que se parece com /John|Smith/ig . Isso retornará true para palavras individuais, bem como funcionará quando a entrada for apenas 'John Sm'

Você pode brincar com esta regex para obter uma mais adequada às suas necessidades.

EDITAR:

O problema aqui é que seus campos de nome são separados. Nesse caso, aplicar o mesmo regex a ambos os campos não resultará nos resultados desejados. A regex precisa ser aplicada ao mesmo campo com o nome completo.

Uma solução possível é usar agregação:
User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})