Como usar filtros e ordenações no Drizzle ORM
Use operadores como eq, ne, like, in e ordene resultados com eficiência no Drizzle ORM sem complicação.
Por que isso é importante
Dominar filtros e ordenações com Drizzle ORM garante consultas de banco de dados mais performáticas, legíveis e escaláveis. Saber como aplicar operadores corretamente é essencial para filtrar dados com precisão e controlar a exibição dos resultados em tempo real.
Consultas com filtros no Drizzle
Para listar perguntas da tabela questions
em um banco configurado com Drizzle ORM, você precisa montar uma consulta com select
, aplicar o where
adequado e trazer o retorno com os tipos já inferidos em TypeScript.
Importação dos operadores
O Drizzle oferece operadores para filtros como igualdade, diferença, comparação e padrões. Eles ficam disponíveis via drizzle-orm
e precisam ser importados explicitamente para utilizar nos filtros.
Operadores disponíveis no Drizzle ORM
⚠️Atenção
Todos os operadores precisam ser importados manualmente. Esquecer de importar provoca erro de tempo de compilação e impede o uso do operador esperado.
Exemplo prático da consulta
Definimos uma constante result
usando await db.select()
. Podemos puxar todos os campos de schema.questions
e já aplicar o filtro com where
, usando o operador eq
, comparando o campo schema.questions.roomId
com o roomId
recebido por parâmetro.
ℹ️Atenção
Certifique-se que os campos usados no filtro já estejam tipados corretamente dentro do schema criado pelo Drizzle.
Aplicando ordenação na consulta
Para que os resultados mais recentes apareçam primeiro, usamos o operador desc
importado de drizzle-orm
. Essa função ordena de forma decrescente com base na coluna selecionada.
✅Atenção
O operador desc
também precisa ser importado. Ele aceita qualquer campo declarado no schema, como schema.questions.createdAt
.
Montagem da consulta completa
eq
e desc
dos pacotes do Drizzle.select
diretamente em schema.questions
.where
com eq(schema.questions.roomId, roomId)
.orderBy(desc(schema.questions.createdAt))
.Trecho de código simplificado
const result = await db.select().from(schema.questions).where(eq(schema.questions.roomId, roomId)).orderBy(desc(schema.questions.createdAt))
❌Atenção
Não confunda o operador desc
com uma string 'DESC', como seria comum em SQL puro. No Drizzle precisamos passar a função para que o tipo seja inferido corretamente.
Resumo dos operadores
Operadores Básicos
Igualdade, diferença e inclusão
Prós
- Mais comuns nas queries
- Fáceis de aplicar
Contras
- Sem suporte a lógica complexa diretamente
Operadores de Padrão e Comparação
like, ilike, maior, menor
Prós
- Úteis para buscas textuais
- Combinam bem com filtros dinâmicos
Contras
- Case sensitive por padrão (exceto ilike)
Ferramentas que complementam Drizzle
PostgreSQL
Banco relacional compatível com Drizzle
TypeScript
Tipagem estática para total suporte no desenvolvimento