3
respostas

Filtro com Node e mongoose

Olá a todos!

Tenho um código que realiza uma consulta no mongo e me retorna os dados em uma tabela! até aqui ta funcionando!

tenho um <form> do tipo "post" na tela de pesquisa com um campo de entrada, para o usuário informar um nome qualquer e fazer um "like" na query.... o que eu não consegui fazer ainda...

alguém pode me dar uma luz

agradeço antecipadamente!

pesquisa: function(req,res){
             if(req.params == null){
            Restaurante.find(function(err,data){
                if(err){
                    req.flash("erro", "Erro ao buscar restaurantes"+ err);
                    res.redirect("/restaurantes");
                }else{
                    res.render("restaurantes/pesquisaRestaurantes", {restaurantes: data});
                }
            }
            );
            }else{
                var nomeRestaurante = req.params.nomeRestaurante;
                Restaurante.find({"nome": new RegExp('/'+nomeRestaurante+'/i') },function(err,data){
                    if(err){

                    }
                    res.render("restaurantes/pesquisaRestaurantes",{restaurantes: data});
                });

            }
        }
3 respostas

Oi Iran, tudo bem? Tenho dúvidas que se você passar um objeto regex, o mongoose fará o match automático. Até onde pesquisei, você pode passar a expressão diretamente.

/`${nomeRestaurante}`/i

Tem também a documentação do mongodb que mostra como usar regex nas consultas. Você pode usar a mesma querie no Mongoose eu acho.

https://docs.mongodb.com/manual/reference/operator/query/regex/

Uma outra forma de fazer buscas do tipo "LIKE" seria usar o operador $search. Aqui tem a explicação

https://docs.mongodb.com/manual/reference/operator/query/text/

Porem, ele faz essa busca apenas nos campos indexados.

Para um campo específico, você pode fazer assim:

db.nome_da_minha_colecao.find({nome_do_campo: /teste/})  //like '%teste%'

db.nome_da_minha_colecao.find({nome_do_campo: /^teste/}) //like 'teste%' 

db.nome_da_minha_colecao.find({nome_do_campo: /teste$/}) //like '%teste'

Iran, dá um feedback pra gente aqui?