gpt4 book ai didi

postgresql - Postgres JSONB : query values in JSON array

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

Postgres 9.4

我有一个像这样的 JSONB 值的记录:

{
"attributeA": 1,
"attributeB": "Foo",
"arrayAttribute": [
{"attributeC": 95, "attributeD": 5},
{"attributeC": 105, "attributeD": 5}
]
}

我想写一个查询:

查找 attributeA = 1、attributeB = 'Foo' 的任何项目,并且对于 arrayAttribute 数组中的每个元素,attributeC 在某个值 X 的 10 点范围内。因此,如果 X 为 100,则上述记录将匹配 ( 95 和 105 都在 100 的 10 分之内)。

不幸的是,我真的很难理解 JSONB 查询语法。执行此操作的最佳方法是什么?

最佳答案

Postgres documentation regarding json真的很棒。至于搜索查询方法,重要的是要知道 ->> 返回 text-> 返回 json(b).

查询可以是以下内容:

select * from json js,jsonb_array_elements(data->'arrayAttribute') as array_element  
where (js.data->>'attributeA')::integer = 1
and js.data->>'attributeB' = 'Foo'
and (array_element->>'attributeC')::integer >= (100-5)
and (array_element->>'attributeC')::integer <= (100+5);

如果你想通过索引选择特定的数组元素,在你的情况下查询如下:

SELECT * FROM json js,jsonb_extract_path(data,'arrayAttribute') AS entireArray 
WHERE (entireArray -> 0 ->> 'attributeC')::integer = 95
AND (entireArray -> 1 ->> 'attributeC')::integer = 105;

关于postgresql - Postgres JSONB : query values in JSON array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357971/

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