我在弄清楚如何查询PostgreSQL JsonB数据类型时遇到麻烦。我有一个结构简单的表:
CREATE TABLE myTable (id BIGINT PRIMARY KEY, answers JSONB)
“答案”列中的所有Json文档均采用以下格式:
[
{"R" : "aaa", "V" : 25},
{"R" : "aaa", "V" : 31},
{"R" : "bbb", "V" : 38}
...
]
列表中可以有很多元素,但是所有元素都有一个“ R”和“ V”项。
我想使用SQL检索表,列出ID,以及所有“ V”的Json列表,其中“ R” ==“ aaa”。
对于上面的示例,我将得到:
有什么想法吗?感谢您的帮助,我花了一些时间在Web上找到JSon路径示例,但没有找到类似的东西。
提前致谢。
注意:仅适用于Postgresql 12+
使用jsonpath:
WITH data(id, json_arr) AS (
VALUES (1, $$[
{ "R": "aaa", "V": 25 },
{ "R": "aaa", "V": 31 },
{ "R": "bbb", "V": 38 }
]$$::JSONB)
)
SELECT id,
-- $[*] : "inside the top level array"
-- ? (@.R == "aaa") : "keep only when the "R" key's value is "aaa""
-- .V : "select the "V" key of those elements"
jsonb_path_query_array(json_arr, '$[*] ? (@.R == "aaa").V')
FROM data
返回:
+--+----------------------+
|id|jsonb_path_query_array|
+--+----------------------+
|1 |[25, 31] |
+--+----------------------+
注意:您也可以使用
jsonb_path_query_array(
json_arr,
'$[*] ? (@.R == $r_value).V',
'{"r_value": "aaa"}' -- pass the 'r_value' to the query above
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句