1
resposta

[Sugestão] Pesquisando livros pelo nome do autor quando o mesmo é um subdocumento de livros

No meu projeto, mantive o author como um subdocumento dentro de books. Com isso, consegui filtrar normalmente usando a sintaxe do Mongoose.

Implementei filtros por publisher, title e também pelo nome do autor, usando regex para deixar a busca case-insensitive. Para acessar o campo do subdocumento, utilizei a notação em ponto (author.name), que funcionou sem problemas.

static async listBooksByFilter(req, res, next) {
    const { publisher, title, authorName } = await req.query;

    const regex = new RegExp(title, "i");

    try {
      const search = {};

      if (publisher) search.publisher = publisher;
      if (title) search.title = regex;

      const findedBooks = await book.find({
        ...search,
        "author.name": { $regex: authorName, $options: "i" },
      });

      await res.status(200).json({ book: findedBooks });
    } catch (err) {
      await next(err);
    }
  }

Achei interessante em compartilhar essa solução.

1 resposta

Oi, Kaique! Como vai?

Agradeço por compartilhar.

Gostei da sua análise e da forma como você explicou a decisão de manter o author como subdocumento, mostrando bem o uso da notação em ponto com Mongoose e a aplicação de regex para buscas case-insensitive. Sua solução faz sentido e está alinhada com o objetivo da atividade de avançar em buscas e filtros em APIs.

Continue explorando esse tipo de abordagem e compartilhando soluções no fórum, isso contribui muito para o aprendizado coletivo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!