1
resposta

[Dúvida] No campo busca com palavras separadas por espaço. Como que escreve na URL?

Olá, tudo certo com vocês?

Eu criei as editoras com mais de uma palavra e não estou sabendo como fazer essa busca na Url... Como por exemplo:

        "editora": {
            "_id": "63e69a2ae51c61f1c80c6046",
            "nome": "Casa do código",
            "endereco": "São Paulo - SP Rua Vergueiro,3185"
        }

Daí no momento de busca no Postman com o GET: http://localhost:3000/livros/busca?editora=Casa do código

Eu coloco o que para representar o espaço em branco na URL? Tentei com o + e não me retornou nada :(

o código de busca por editora é esse:

static listarLivroPorEditora = (req, res) => {
      const editora = req.query.editora;

      livros.find({'editora': editora}, {}, (err,livros) => {
         res.status(200).send(livros);
      });
}
1 resposta

Oi, Rodrigo, tudo bem?

Vejo que você alterou o tipo do campo "editora" no modelo dos livros. Agora, em vez dela ser apenas uma string, ela é um objeto com as propriedades nome e endereco.

Visto isso, o problema não é que você está passando espaços na URL, e sim na forma como a busca está sendo feita no método find. Você está passando um objeto {'editora': editora}, que era a forma como deveria ser feito se o campo "editora" ainda fosse uma string com o nome da editora. Mas agora que esse campo é um objeto com a propriedade "nome", o objeto de busca do método find deve ser alterado para o seguinte:

{'editora.nome': editora}

Assim, a busca irá procurar pelos livros que possuem um campo "editora" com a propriedade "nome" igual ao parâmetro "editora" fornecido pela URL. Ao fazer isso, sua busca já deve funcionar :)

Existem alguns exemplos com esse tipo de sintaxe de busca na página Queries da documentação do Mongoose. Se você quiser ver ainda mais detalhes sobre como essa sintaxe funciona em objetos aninhados, você também pode estudar pela página Query on Embedded/Nested Documents da documentação do MongoDB.

Espero ter ajudado! Abraços e bons estudos :)