从 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结构中嵌套数组中元素的属性
我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?