获取其 JSON 数组包含具有值的对象的行
Posted
技术标签:
【中文标题】获取其 JSON 数组包含具有值的对象的行【英文标题】:Get rows whose JSON array contains an object with a value 【发布时间】:2021-12-31 07:45:32 【问题描述】:我有一个查询,它返回一个名为 record
的 JSON 列,该列由子查询生成。
SELECT record FROM (my json query) records;
每条记录都包含一个标签对象数组:
"tags": [
"id": 3,
"name": 'foo'
,
"id": 10,
"name": 'bar'
],
// other props
我想修改我的查询以选择所有records
,其中tags
包含具有特定ID 的标签,但我不知道如何在不添加另一个子查询的情况下执行此操作。是否有任何我缺少的功能或操作可以仅使用 where 子句来实现?
在伪代码中,有什么我可以做的吗?
SELECT record FROM (my json query) records
WHERE 3 = ANY(get_ids_from_objects(record->'tags', 'id'));
出于代码原因,我也不想修改创建 JSON 结构的子查询,这就是我排除它的原因。
【问题讨论】:
【参考方案1】:您可以使用包含运算符@>
select *
from (your query)
where record @> '"tags": ["id": 3]'
这假定列record
的类型为jsonb
(它应该是)。如果不是,则需要投:record::jsonb
【讨论】:
@chrispytoes:已修复,抱歉以上是关于获取其 JSON 数组包含具有值的对象的行的主要内容,如果未能解决你的问题,请参考以下文章