通过密钥访问jsonb值[]

问题描述

我目前正在以以下格式将数据存储在postgres db的jsonb列中: {"ids": [4,3,2,1]},其中值是整数数组。

我希望执行以下操作:

  1. 在该列中包含值4的行中找到行
    'ids'键的数组。

  2. 在“ ids”键的值数组中找到该列包含值2、3和1的行。

我最近的尝试使用以下

select * from tablename WHERE (column_name -> ids)::integer[] && ARRAY[1,3]

哪个在:: integer [] ERROR: cannot cast type jsonb to integer[]

给了我一个类型转换错误

我怀疑我正在尝试转换“ ids”部分,需要更深入地研究,但是我不确定如何(如果那是正确的方法)。

解决方法

使用包含运算符// package.json { ... "dependencies": { "gatsby-plugin-theme-ui": "^0.4.0-rc.1","@theme-ui/prism": "^0.4.0-rc.1","theme-ui": "^0.4.0-rc.1",} }

@>

这也适用于多个值:

select * 
from tablename 
WHERE column_name @> '{"ids":[4]}'

Online example

,
SELECT * from tablename WHERE column_name -> 'ids' @> '[4]'::jsonb
SELECT * from tablename WHERE column_name -> 'ids' @> '[2,3,1]'::jsonb