jsonb 查询,使用数组字段查询JSONB

If I have a jsonb column called value with fields such as:

{"id": "5e367554-bf4e-4057-8089-a3a43c9470c0",

"tags": ["principal", "reversal", "interest"],,, etc}

how would I find all the records containing given tags, e.g:

if given: ["reversal", "interest"]

it should find all records with either "reversal" or "interest" or both.

My experimentation got me to this abomination so far:

select value from account_balance_updated

where value @> '{}' :: jsonb and value->>'tags' LIKE '%"principal"%';

of course this is completely wrong and inefficient

解决方案

As it turned out you can use cool jsonb operators described here:

so original query doesn't have to change much:

select value from account_balance_updated

where value @> '{}' :: jsonb and value->'tags' ?| array['reversal', 'interest'];

in my case I also needed to escape the ? (??|) because I am using so called "prepared statement" where you pass query string and parameters to jdbc and question marks are like placeholders for params:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值