Skip to content

Backend with Tadabase

Filtering & searching records

The operator grammar, keyword search, and the gotchas that bite.

Condition groups

A filter is a group of conditions. Each item names a field, an operator, and a value. One condition (AND by default, or OR) governs how a group's items combine, and groups can nest for complex logic.

ts
// (status = Active) AND (overdue OR high-value)
const { data } = await tada.records.list('invoices', {
  filters: {
    condition: 'AND',
    items: [{ field_id: 'field_30', operator: 'is', val: 'Active' }],
    child: [{
      condition: 'OR',
      items: [
        { field_id: 'field_22', operator: 'is before today' },
        { field_id: 'field_14', operator: 'higher than', val: 10000 },
      ],
    }],
  },
});

The operator catalog

Operators are exact, case-sensitive strings with real spaces. A few of the most useful:

OperatorUse
is / is notExact match / exclusion.
containsSubstring match on text.
is blank / is not blankEmpty checks.
higher than / lower thanNumbers, currency, dates.
is today or afterUpcoming dates.
is before todayOverdue dates.
is during the previousRelative window — pair with val2 (count) + val3 (days/weeks/months/years).
is logged in userMatch the current user on a User field — no value needed.

Pass search for a keyword box — it ORs a "contains" across every searchable field on the table (text, name, email, phone, select, number, currency, join, equation, formula). Date, Time, Files, Decision-box, and Auto-increment fields are always excluded. Narrow it with searchFields.

ts
tada.records.list('customers', { search: 'acme', searchFields: ['field_1', 'field_5'] });
Ready to build

Skip the docs.
Just describe it.

Tadabase AI builds it, hosts it and keeps it running. Real backend, real domain, real app.

Start Building