Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Listar livros por Editora

Eu alterei um pouco o código do livro.js para ele aceitar a propriedade editora como um Schema, conforme imagem abaixo: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeMas como faço para buscar agora pela editora agora que eu não tenho simplesmente o nome da editora? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Olá, Yuri! Tudo bem?

Para buscar livros por editora no MongoDB, quando a editora é um objeto ou um Schema separado, você precisa usar uma abordagem ligeiramente diferente. Você pode usar o método populate do Mongoose, que permite que você referencie documentos em outras coleções.

Assumindo que você tem um modelo Editora e que o bookSchema está referenciando esse modelo em sua propriedade editora, você pode fazer algo assim no seu controlador:

static async listarLivrosPorEditora(req, res) {
    const nomeEditora = req.query.editora; // Captura o nome da editora passado como query parameter

    try {
        // Primeiro, encontra a editora pelo nome
        const editora = await Editora.findOne({ nome: nomeEditora });

        // Se a editora não existir, retorna um erro
        if (!editora) {
            return res.status(404).json({ message: 'Editora não encontrada' });
        }

        // Depois, busca os livros que têm essa editora, usando populate para preencher os dados da editora
        const livros = await Livro.find({ editora: editora._id }).populate('editora');

        res.status(200).json(livros);
    } catch (erro) {
        res.status(500).json({ message: `${erro.message} - falha na busca.` });
    }
}

Neste código, primeiro buscamos a editora pelo nome. Isso assume que você tem um modelo Editora e que a editora é buscada pelo campo nome. Depois, usamos o ID da editora encontrada para buscar os livros associados a essa editora. O método populate('editora') é usado para incluir os detalhes da editora nos resultados dos livros, assumindo que editora é uma referência no seu bookSchema.

Certifique-se de que os modelos e as referências estão corretamente configurados para que isso funcione. Também é importante tratar o caso em que a editora não é encontrada para evitar erros de execução.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Muito obrigado! Funcionou perfeitamente! Mas tenho algumas observações e gostaria de saber o motivo delas:

Na linha const livros = await Livro.find({ editora: editora._id }).populate('editora');

percebi que o "_id" faz com que o método não funcione. Então deixei somente await Livro.find({ editora: editora }). Nem o .populate('editora') precisei colocar, parece que ele não faz diferença.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software