从 jsonb 数组包含具有特定属性的元素的表中选择

Posted

技术标签:

【中文标题】从 jsonb 数组包含具有特定属性的元素的表中选择【英文标题】:Select from table where jsonb array has elements with specific properties 【发布时间】:2018-01-05 14:14:45 【问题描述】:

如何选择具有 jsonb 数组的表中的行,该数组包含具有特定属性的元素?

例如:如果jsonb如下

 "list" : [
     "name": "John", "money": 100,  
     "name": "Dan", "money": 900
  ]
 

如何选择数组中至少有一个名为“Dan”的元素的行? 我试过了:

select jsonb_pretty(data) from table where data -> 'list' @>  '"name": "Dan"';

但 id 不返回任何行。

【问题讨论】:

您的例外价值是多少?整行或只是 "name": "Dan", "money": 900 ? SELECT jsonb_pretty(data) FROM table WHERE data -> 'list' @> '["name": "Dan"]' ? @FeanDoe 没关系,我只是想能够识别那一行。 @bma 好像这个有效!你想写一个答案让我接受吗? 【参考方案1】:

这里的关键是JSONB值(列中)需要匹配过滤器:

SELECT jsonb_pretty(data)
FROM table
WHERE data -> 'list' @> '["name": "Dan"]'

注意["name": "Dan"] 周围的[] 过滤器。

PostgreSQL JSON/JSONB 函数和运算符documentation 供进一步参考。

【讨论】:

以上是关于从 jsonb 数组包含具有特定属性的元素的表中选择的主要内容,如果未能解决你的问题,请参考以下文章

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

PostgreSQL:更新JSONB结构中嵌套数组中元素的属性

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

Postgres:从匿名jsonb数组元素中删除对象

如何在 PostgreSQL JSONB 列中查询具有异构元素的嵌套数组

查询jsonb PSQL中数组元素的where子句