json - 如何检查一个值是否存在于 JSONB 列表中

标签 json postgresql jsonb postgresql-11

我试图在 PostgreSQL 11 JSONB 查询中找出

SELECT id, my_json_field #>> '{field_depth_1, field_depth_2}' 
FROM my_data 
WHERE my_json_field @> '{"other_field": 3}'::jsonb

如果 other_field 是一个键值对,这将完美地工作,我得到每一行 other_field = 3。但是,如果 other_field 是一个值列表,例如:[2,3,6,8,10],我想为每一行找出值 3 是否存在于由other_field,查询应该怎么写?

最佳答案

使用运算符@>。每the documentation:

@> jsonb Does the left JSON value contain the right JSON path/value entries at the top level?

例子:

with my_data(id, my_json_field) as (
values
    (1, '{"field_depth_1": {"field_depth_2": "something 1"}, "other_field": 3}'::jsonb),
    (2, '{"field_depth_1": {"field_depth_2": "something 2"}, "other_field": 4}'),
    (3, '{"field_depth_1": {"field_depth_2": "something 3"}, "other_field": [2,3,6,8,10]}'),
    (4, '{"field_depth_1": {"field_depth_2": "something 4"}, "other_field": [2,4,6,8,10]}')
)

select id, my_json_field #>> '{field_depth_1, field_depth_2}' as value
from my_data 
where my_json_field->'other_field' @> '3'

 id |    value    
----+-------------
  1 | something 1
  3 | something 3
(2 rows)    

关于json - 如何检查一个值是否存在于 JSONB 列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58275440/

相关文章:

javascript - 构建动态 TreeMap

javascript - 使用 Node js从另一个文件调用两个文件

sql-server - 数据库引擎在 SQL 级别的兼容性如何?

postgresql - Sequelize 连接表并使用源模型过滤

postgresql - 如何将 Odoo 与 postgres 连接(在其他服务器上运行)

ruby-on-rails - Active Record 查询 JSONB 列上存储数组中的第一个值

javascript - D3 节点半径取决于链接数 : weight property

ios - 如何从Swift 4/json字典中的多值键检索单个值?

PostgreSQL : Update multiple inner jsonb objects fields with same name

sql - 根据键值对过滤存储在Postgres中的JSON数据