获取其 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 数组包含具有值的对象的行的主要内容,如果未能解决你的问题,请参考以下文章

数组,找到具有值的对象并获取其 indexPath

LINQ:获取包含具有特定名称和值的属性的数组中的对象

如何获取 SQL 中具有 MAX 和 MIN 值的行的 ID

获取具有特定数量的重复值的行

选择嵌套 JSON 数组包含特定值的行

如何在 PHP 中获取 JSON 数组并打印其值?