superapp
ReferenceClient API

Filter Operators

Complete Drizzle filter operator reference.

Drizzle provides filter operators as functions imported from drizzle-orm. They're used in .where() clauses and relational query conditions.

import { eq, gt, and } from 'drizzle-orm'

const orders = await db.select()
  .from(schema.orders)
  .where(and(
    eq(schema.orders.status, 'active'),
    gt(schema.orders.amount, 100)
  ))

Comparison Operators

FunctionDescriptionSQL EquivalentExample
eq(col, val)Equal to= valueeq(schema.orders.status, 'active')
ne(col, val)Not equal to!= valuene(schema.orders.status, 'cancelled')
gt(col, val)Greater than> valuegt(schema.orders.amount, 100)
gte(col, val)Greater than or equal>= valuegte(schema.orders.amount, 100)
lt(col, val)Less than< valuelt(schema.orders.amount, 1000)
lte(col, val)Less than or equal<= valuelte(schema.orders.amount, 1000)
between(col, a, b)Between two valuesBETWEEN a AND bbetween(schema.orders.amount, 100, 1000)
import { gte, lte, and, between } from 'drizzle-orm'

// Range with individual operators
db.select().from(schema.orders).where(and(
  gte(schema.orders.amount, 10),
  lte(schema.orders.amount, 100)
))

// Same range with between
db.select().from(schema.orders).where(
  between(schema.orders.amount, 10, 100)
)

// Date comparison
db.select().from(schema.orders).where(
  gte(schema.orders.createdAt, new Date('2025-01-01'))
)

Set Operators

FunctionDescriptionSQL EquivalentExample
inArray(col, vals)Value is in arrayIN (values)inArray(schema.orders.status, ['active', 'pending'])
notInArray(col, vals)Value is not in arrayNOT IN (values)notInArray(schema.orders.status, ['cancelled'])
import { inArray, notInArray } from 'drizzle-orm'

db.select().from(schema.orders).where(
  inArray(schema.orders.status, ['active', 'pending', 'processing'])
)

db.select().from(schema.orders).where(
  notInArray(schema.orders.status, ['cancelled', 'archived'])
)

Pattern Matching

FunctionDescriptionSQL EquivalentExample
like(col, pattern)Case-sensitive patternLIKE patternlike(schema.customers.name, 'Acme%')
ilike(col, pattern)Case-insensitive patternILIKE patternilike(schema.customers.email, '%@example.com')

Pattern characters: % matches any sequence, _ matches one character.

import { like, ilike } from 'drizzle-orm'

db.select().from(schema.customers).where(
  like(schema.customers.name, 'Order%')
)

db.select().from(schema.customers).where(
  ilike(schema.customers.email, '%@example.com')
)

Null Checks

FunctionDescriptionSQL Equivalent
isNull(col)Column is nullIS NULL
isNotNull(col)Column is not nullIS NOT NULL
import { isNull, isNotNull } from 'drizzle-orm'

// Active records (not soft-deleted)
db.select().from(schema.orders).where(isNull(schema.orders.deletedAt))

// Assigned records
db.select().from(schema.orders).where(isNotNull(schema.orders.assignedTo))

Logical Operators

FunctionDescriptionSQL Equivalent
and(...conds)All conditions must matchcond1 AND cond2
or(...conds)At least one must matchcond1 OR cond2
not(cond)Negate a conditionNOT (condition)

and()

import { and, eq, gte } from 'drizzle-orm'

db.select().from(schema.orders).where(and(
  eq(schema.orders.status, 'active'),
  gte(schema.orders.amount, 100)
))

or()

import { or, eq } from 'drizzle-orm'

db.select().from(schema.orders).where(or(
  eq(schema.orders.status, 'active'),
  eq(schema.orders.status, 'pending')
))

not()

import { not, inArray } from 'drizzle-orm'

db.select().from(schema.orders).where(
  not(inArray(schema.orders.status, ['cancelled', 'archived']))
)

Complex Combinations

import { and, or, eq, gte, isNull } from 'drizzle-orm'

// Active or shipped, high value, not deleted
db.select().from(schema.orders).where(and(
  or(
    eq(schema.orders.status, 'active'),
    eq(schema.orders.status, 'shipped')
  ),
  gte(schema.orders.amount, 1000),
  isNull(schema.orders.deletedAt)
))

Server-Side Permission Operators

The backend permission system uses a separate MongoDB-style operator syntax (not Drizzle functions). See Permission Operators for the server-side reference.

Quick Reference

FunctionImportUsage
eqdrizzle-ormeq(col, value)
nedrizzle-ormne(col, value)
gtdrizzle-ormgt(col, value)
gtedrizzle-ormgte(col, value)
ltdrizzle-ormlt(col, value)
ltedrizzle-ormlte(col, value)
betweendrizzle-ormbetween(col, min, max)
inArraydrizzle-orminArray(col, [values])
notInArraydrizzle-ormnotInArray(col, [values])
likedrizzle-ormlike(col, pattern)
ilikedrizzle-ormilike(col, pattern)
isNulldrizzle-ormisNull(col)
isNotNulldrizzle-ormisNotNull(col)
anddrizzle-ormand(...conditions)
ordrizzle-ormor(...conditions)
notdrizzle-ormnot(condition)

On this page