You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Supabase中查询包含指定值的JSONB数组列?

正确查询JSONB数组列中包含指定user值的行

你的问题出在没处理JSONB数组的结构——users列是数组类型,不是单个JSON对象,直接用users -> user根本取不到值,因为数组本身没有user这个键,得先遍历数组里的元素再判断。

下面给两种可行的写法,包括原生SQL和你用的查询构建器(比如Knex)的写法:

方法1:用JSONB包含操作符@>

这种写法简洁高效,适合精确匹配数组中的对象片段:

原生SQL

SELECT * FROM your_table WHERE users @> '[{"user": 123}]'::jsonb;

查询构建器(Knex)写法

.from('your_table')
.select('*')
.whereRaw('users @> ?::jsonb', ['[{"user": 123}]'])

方法2:用jsonb_array_elements展开数组+EXISTS子查询

如果需要更灵活的条件(比如模糊匹配、多条件组合),可以用这种方式:

原生SQL

SELECT * FROM your_table t
WHERE EXISTS (
  SELECT 1 FROM jsonb_array_elements(t.users) elem
  WHERE elem->>'user' = '123'
);

查询构建器(Knex)写法

.from('your_table as t')
.select('*')
.whereExists(function() {
  this.fromRaw('jsonb_array_elements(t.users) as elem')
    .whereRaw("elem->>'user' = ?", ['123']);
})

注意:如果user字段是数值类型,用elem->'user' = 123(不带第二个>)也可以,但用->>转成字符串再匹配更稳妥,避免类型转换问题。

内容的提问来源于stack exchange,提问作者chichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:22:10