Informática Múltipla Escolha

Qual seria o comando, ao nível do DAO, para retornar todos os endereços cujos nomes das cidades são iniciados pelo valor fornecido no parâmetro ncid do método de busca?

Qual seria o comando, ao nível do DAO, para retornar todos os endereços cujos nomes das cidades são iniciados pelo valor fornecido no parâmetro ncid do método de busca?

  1. db.Endereço.findAll({cidade: ncid});
  2. db.Endereço.findOne({where: {cidade: ncid%}}});
  3. db.Endereço.findOne({where: {{Op.like]: ncid%}}});
  4. db.Endereço.findAll({where: {cidade: {[Op.like]: “#” + ncid + “%”}}});
  5. db.Endereço.findAll({where: {cidade: ncid}});

Resolução completa

Explicação passo a passo

D
Alternativa D

Alternativa D - db.Endereco.findAll({where: {cidade: {[Op.like]: "#" + ncid + "%"}}});

Para resolver esta questão, é necessário compreender a sintaxe do Sequelize, um ORM (Object Relational Mapping) muito utilizado no ecossistema Node.js, e os conceitos básicos de consulta ao banco de dados.

Conceitos Fundamentais

  1. Retorno Múltiplo (findAll):
  • O enunciado solicita "todos os endereços".
  • No Sequelize, o método para buscar múltiplos registros é findAll().
  • O método findOne() retorna apenas o primeiro registro encontrado. Portanto, as alternativas que usam findOne (2ª e 3ª opções) estão incorretas.
  1. Cláusula where:
  • As condições de filtragem devem ser passadas como propriedades dentro do objeto de configuração do método.
  • A sintaxe correta é Model.findAll({ where: { campo: valor } }).
  • A primeira alternativa tenta chamar .where() como um método encadeado (findAll().where(...)), o que é sintaticamente incorreto no Sequelize.
  1. Busca Parcial (LIKE):
  • O enunciado pede endereços "iniciados pelo valor". Isso equivale a uma busca de prefixo no banco de dados.
  • Em SQL, utilizamos o operador LIKE seguido do padrão 'valor%'.
  • No Sequelize, devemos usar o operador Op.like (importado de sequelize) para garantir a segurança e a compatibilidade.
  • A última alternativa usa {cidade: ncid}, o que gera uma busca por igualdade exata (=), ignorando o critério de "iniciar com".

Análise Detalhada da Resposta Correta

A alternativa correta é a quarta opção:

db.Endereco.findAll({where: {cidade: {[Op.like]: "#" + ncid + "%"}}});
  • db.Endereco.findAll: Busca todos os registros da entidade Endereco.
  • {where: ...}: Define o filtro de busca.
  • {Op.like: ...}: Utiliza o operador de padronização SQL (LIKE).
  • Concatenação: O código constrói a string de busca. Embora o caractere # inicial pareça incomum (pode ser um requisito específico do sistema ou um detalhe da questão), a estrutura lógica de usar Op.like combinado com % no final é a única que atende ao requisito de "iniciados por" e "todos".

Resumo das Eliminações

AlternativaMotivo da Incorreção
1ª (findAll().where)Sintaxe inválida (chaining errado).
2ª (findOne)Retorna apenas um registro, não "todos".
3ª (findOne)Retorna apenas um registro e falta o operador Op.
5ª (cidade: ncid)Faz busca exata, não parcial (LIKE).

Conclusão: A única alternativa que combina a busca por múltiplos registros (findAll) com o operador de padrão (Op.like) é a Alternativa D.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Informática

Ver mais Informática resolvidas

Tem outra questão de Informática?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.