当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL:JSON数组中的查询元素

闻人景澄
2023-03-14

我有一个如下所示的数据库表:

---------------------------------------
| id | json_array (jsonb)             |
---------------------------------------
|  1 | [{"a": 1}, {"a": 5}, {"a": 1}] |
|  2 | [{"a": 2}]                     |
|  3 | [{"a": 1}]                     |
---------------------------------------

我想使用PostgreSQL的JSON查询功能来选择JSON\u数组中的某些子字典,例如字典中的a:1。

输出应为

------------------
| id | json_dict |
------------------
|  1 | {"a": 1}  |
|  1 | {"a": 1}  |
|  3 | {"a": 1}  |
------------------

以下查询适用于每个数组中的第一个元素,但我想检查所有元素:

sql prettyprint-override">SELECT id, json_array -> 0
FROM my_table
WHERE json_array -> 0 -> "a" = 1;

共有2个答案

安承教
2023-03-14

演示:db

您可以使用jsonb\u array\u elements()将数组元素扩展为每行一个元素。可以对其进行筛选:

SELECT
    id,
    elems.value
FROM
    mytable,
    jsonb_array_elements(data) elems
WHERE
    elems.value = '{"a":1}'
西门嘉石
2023-03-14

假设这是一个JSONB列,您可以使用@

select *
from my_table
where json_array @> '[{"a": 1}]';

联机示例:https://rextester.com/SACUDU51598

如果希望所有对象都作为行,则需要取消阵列的测试

select t.id, e.obj
from data t
  cross join jsonb_array_elements(json_array) as e(obj)
where e.obj = '{"a": 1}'

在线示例:https://rextester.com/DLG27322

 类似资料:
  • 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是虚拟数据。 是否可以根据id查询电子邮件数组中的特定项目 差不多:“返回id=123的电子邮件)”?

  • 问题内容: 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是伪数据。 是否可以根据id在emails数组中查询特定项目? 差不多:“返回电子邮件,其中id = 123)”? 问题答案: 是的,这是可能的: 是您的表名,是JSON列的名称。

  • 我尝试使用函数JSON\u array\u elements()卸载JSON数组,并尝试使用JSON\u array\u length(field\u name)计算数组的元素,但没有成功。我使用的是PostgreSQL 9.4.5。 我想查询元素“name”的结果,这是json类型数组field crew | json[]上保存的数据。

  • 本文向大家介绍用MongoDB查询数组元素?,包括了用MongoDB查询数组元素?的使用技巧和注意事项,需要的朋友参考一下 查询数组元素时,MongoDB更好。让我们使用以下语法查询数组元素- 上面的语法将返回所有在数组字段中具有“ yourValue”值的文档。 为了理解这个概念,让我们用文档创建一个集合。使用文档创建集合的查询如下- 在method的帮助下显示集合中的所有文档。查询如下- 以下

  • 如果s/he在元值数组中,我很难查询当前用户的cpt。 返回false或空数组。取决于之前是否设置过字段。 我试过将compare设置为相等,但也不起作用。可能是因为该值位于数组中。 查询应返回在键中具有当前用户id的所有帖子。 重要提示: 允许用户的

  • 问题内容: 我有一个像这样的数据结构 我需要查询“电话号码”中的所有元素,并且必须检查这些电话号码是否已存在于另一个集合中。我的数据结构的下一条路径是 是否可以在Firestore中进行任何索引编制? 问题答案: 如官方文档中所示: 尽管Cloud Firestore可以存储阵列,但可以 查询阵列成员或更新单个阵列元素。 如果只想获取整个数组,则需要像这样迭代: 但是请注意,即使对象作为数组存储在