[英]Postgres - query JSON column value of nested object
我在表格的JSONB列(命名字段 )中使用以下架构。 这些字段条目中有几个。
{
"FIELD_NAME": {
"value" : "FIELD_VALUE",
"meta": {
"indexable": true
}
}
}
我需要找到包含该对象的所有字段
"meta": {
"indexable": true
}
这是在where子句中使用json_object_keys
的幼稚尝试,该方法不起作用,但说明了我要执行的操作。
with entry(fields) as (values('{
"login": {
"value": "fred",
"meta": {
"indexable": true
}
},
"password_hash": {
"value": "88a3d1c7463d428f0c44fb22e2d9dc06732d1a4517abb57e2b8f734ce4ef2010",
"meta": {
"indexable": false
}
}
}'::jsonb))
select * from entry where fields->jsonb_object_keys(fields) @> '{"meta": {"indexable": "true"}}'::jsonb;
如何查询嵌套对象的值? 我可以以某种方式将json_object_keys
的结果与表iself联接吗?
第一种方式 :使用jsonb_each()
SELECT
jsonb_build_object(elem.key, elem.value) -- 3
FROM
entry,
jsonb_each(fields) as elem -- 1
WHERE
elem.value @> '{"meta": {"indexable": true}}' -- 2
key
和value
(在您的情况下为login
和{"meta": {"indexable": true}, "value": "fred"}
) @>
检查值列中是否包含meta
对象来过滤记录 key
/ value
列) 第二种方法 :使用jsonb_object_keys()
SELECT
jsonb_build_object(keys, fields -> keys) -- 3
FROM
entry,
jsonb_object_keys(fields) as keys -- 1
WHERE
fields -> keys @> '{"meta": {"indexable": true}}' -- 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.