JavaScript: Using filters

Filters allow you to only return rows that match certain conditions.

Filters can be used on select(), update(), upsert(), and delete() queries.

If a Postgres function returns a table response, you can also apply filters.

Examples

Applying Filters

const \{ data, error \} = await supabase
  .from('cities')
  .select('name, country_id')
  .eq('name', 'The Shire')    // Correct

const \{ data, error \} = await supabase
  .from('cities')
  .eq('name', 'The Shire')    // Incorrect
  .select('name, country_id')

Chaining

const \{ data, error \} = await supabase
  .from('cities')
  .select('name, country_id')
  .gte('population', 1000)
  .lt('population', 10000)

Conditional Chaining

const filterByName = null
const filterPopLow = 1000
const filterPopHigh = 10000

let query = supabase
  .from('cities')
  .select('name, country_id')

if (filterByName)  \{ query = query.eq('name', filterByName) \}
if (filterPopLow)  \{ query = query.gte('population', filterPopLow) \}
if (filterPopHigh) \{ query = query.lt('population', filterPopHigh) \}

const \{ data, error \} = await query

Filter by values within a JSON column

const \{ data, error \} = await supabase
  .from('users')
  .select()
  .eq('address->postcode', 90210)

Filter referenced tables

const \{ data, error \} = await supabase
  .from('countries')
  .select(`
    name,
    cities!inner (
      name
    )
  `)
  .eq('cities.name', 'Bali')