gpt4 book ai didi

json - 在 Postgres 中使用嵌套数组高效查询 JSON

转载 作者:行者123 更新时间:2023-11-29 12:42:12 29 4
gpt4 key购买 nike

我正在尝试在 Postgres(Amazon RDS 上的 9.6)中查询 JSON 数据结构。数据包含对象数组,而对象数组又具有包含对象数组的元素。我想在这些嵌套数组之一中找到与键 + 值匹配的所有记录。

给定这样的行:

{"drinkers" : [
{"name" : "geoff",
"beers" : [
{"name": "PBR"},
{"name" : "Bud Select"}
]},
{"name" : "tom",
"beers" : [
{"name": "Bud Light"},
{"name" : "Busch"}
]}
]}

我想找到所有包含名为“PBR”的 drinkers.beers 对象的行。我最接近的是:

select jsonb_data 
from bars
where jsonb_array_elements(jsonb_array_elements(data -> 'drinkers') -> 'beers') ->> 'name' = 'PBR'``

但这不起作用,因为 where 返回一个列表,而不是要匹配的单个 true/false。我已经使用子查询、横向连接等提出了其他解决方案,但所有这些解决方案都存在性能问题,即使使用适当的 gin 索引也是如此。关于如何在 Postgres 中查询这样的数据结构有什么建议吗?

最佳答案

您是否尝试过使用 IN 运算符?

WHERE 'PBR' IN (
SELECT jsonb_array_elements(jsonb_array_elements(data -> 'drinkers') -> 'beers') ->> 'name'
);

另一种方法是使用 JSONB contain(即 @>):

WHERE data -> 'drinkers' @> '[{"beers": [{"name": "PBR"}]}]';

关于json - 在 Postgres 中使用嵌套数组高效查询 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com