-
Notifications
You must be signed in to change notification settings - Fork 0
Operators
Carlos Lopez edited this page Jul 16, 2026
·
1 revision
Operadores para filtrar datos en queries.
Igualdad exacta.
// Obtener usuario con id específico
await db.select().from(User).where(eq('id', 'uuid-1'));
// Obtener usuarios de 30 años
await db.select().from(User).where(eq('age', 30));No igual.
// Usuarios que NO tienen 30 años
await db.select().from(User).where(ne('age', 30));
// Usuarios que NO son admin
await db.select().from(User).where(ne('role', 'admin'));Mayor que (>).
// Usuarios mayores de 18 años
await db.select().from(User).where(gt('age', 18));Mayor o igual (>=).
// Usuarios de 18 años o más
await db.select().from(User).where(gte('age', 18));
// Productos con precio >= $100
await db.select().from(Product).where(gte('price', 100));Menor que (<).
// Usuarios menores de 65 años
await db.select().from(User).where(lt('age', 65));Menor o igual (<=).
// Descuentos para usuarios <= 12 años
await db.select().from(User).where(lte('age', 12));Búsqueda case-insensitive con wildcards.
// Emails que contienen 'example.com'
await db
.select()
.from(User)
.where(ilike('email', '%example.com'));
// Nombres que empiezan con 'John'
await db
.select()
.from(User)
.where(ilike('name', 'John%'));
// Emails que terminan con '.org'
await db
.select()
.from(User)
.where(ilike('email', '%.org'));Todas las condiciones deben cumplirse (AND lógico).
import { and, eq, gte, ilike } from '@kettu/gitdb';
await db
.select()
.from(User)
.where(
and(
gte('age', 18),
eq('isActive', true),
ilike('email', '%@example.com')
)
);Al menos una condición debe cumplirse (OR lógico).
import { or, eq } from '@kettu/gitdb';
await db
.select()
.from(User)
.where(
or(
eq('role', 'admin'),
eq('role', 'moderator'),
eq('role', 'superuser')
)
);Negación lógica.
import { not, eq } from '@kettu/gitdb';
// Usuarios que NO son admins
await db
.select()
.from(User)
.where(not(eq('role', 'admin')));import { and, or, eq, gte, ilike } from '@kettu/gitdb';
// (age >= 18 AND role = 'admin') OR (age >= 21 AND status = 'verified')
await db
.select()
.from(User)
.where(
or(
and(
gte('age', 18),
eq('role', 'admin')
),
and(
gte('age', 21),
eq('status', 'verified')
)
)
);import { or, ilike } from '@kettu/gitdb';
await db
.select()
.from(User)
.where(
or(
ilike('email', '%@gmail.com'),
ilike('email', '%@outlook.com'),
ilike('email', '%@example.com')
)
);import { and, or, ilike, gte } from '@kettu/gitdb';
const searchTerm = 'john';
const minAge = 18;
await db
.select()
.from(User)
.where(
and(
or(
ilike('name', `%${searchTerm}%`),
ilike('email', `%${searchTerm}%`)
),
gte('age', minAge)
)
);Todos los operadores son type-safe:
const user = await db.select().from(User);
// Error de compilación si 'nonexistent' no existe
await db.select().from(User).where(eq('nonexistent', 'value'));- Usa índices en campos que filtras frecuentemente
- Limita resultados combinando múltiples predicados
- Evita wildcards al inicio en ilike (%, por ejemplo: '%term' es lento)
- Query API - Operaciones CRUD
- Aggregations - COUNT, SUM, AVG