Postgresql从JSONB字段中的嵌套对象数组获取密钥
这里是jsonb列的虚拟数据Postgresql从JSONB字段中的嵌套对象数组获取密钥,postgresql,jsonb,postgresql-json,Postgresql,Jsonb,Postgresql Json,这里是jsonb列的虚拟数据 { "address": [ { "country": "US", "extension": [ { "extension": [ { "valueDecimal": -71.024638, "url": "latitude" }, { "url": "longitude", "valueDecimal": 42
{
"address": [
{
"country": "US",
"extension": [
{
"extension": [
{
"valueDecimal": -71.024638,
"url": "latitude"
},
{
"url": "longitude",
"valueDecimal": 42.082543
}
],
"url": "url1"
}
],
"postalCode": "02301",
"city": "Brockton"
},
{
"country": "US",
"extension": [
{
"extension": [
{
"valueDecimal": -71.024638,
"url": "latitude"
},
{
"url": "longitude",
"valueDecimal": 42.082543
}
],
"url": "url2"
}
],
"postalCode": "02301",
"city": "Brockton"
}
]
}
我想得到类似于,address->'extension'->'extension'->'valueDecimal'
但它只适用于json,但它是一个json数据数组…我期望的输出-
[-71.024638, -71.024638]
我能够通过下面的查询获得第一个扩展(即JSON的第一个数组)
SELECT elems.value FROM "patient", jsonb_array_elements(resource -> 'extension') AS elems;
所以问题是我无法获取内部的“扩展”(它位于扩展对象内部)数据。任何帮助都会有帮助。您可以交叉连接多个级别的
jsonb\u数组\u元素
SELECT json_agg(elems3->>'valueDecimal') as latitudes
FROM patient
cross join jsonb_array_elements(resource ->'address' ) AS elems
cross join jsonb_array_elements(elems ->'extension') AS elems2
cross join jsonb_array_elements(elems2 ->'extension') AS elems3
where elems3->>'url' = 'latitude'
对于大型记录,这可能会较慢,尽管有一些方法可以提高性能。建议您重新设计并规范化您的表,将值作为列单独存储在相应的表中,并且仅在没有其他方法处理数据的情况下使用
JSON
。您可以交叉连接多个级别的jsonb_数组_元素
SELECT json_agg(elems3->>'valueDecimal') as latitudes
FROM patient
cross join jsonb_array_elements(resource ->'address' ) AS elems
cross join jsonb_array_elements(elems ->'extension') AS elems2
cross join jsonb_array_elements(elems2 ->'extension') AS elems3
where elems3->>'url' = 'latitude'
对于大型记录,这可能会较慢,尽管有一些方法可以提高性能。一个建议的选项是重新设计并规范化您的表,将值分别作为列存储在相应的表中,并仅在没有其他方法处理数据的情况下使用
JSON
。是否有任何方法为这些嵌套数据编制索引?@Jitendra:是的,正如我所说,有一些选项,例如使用GIN
索引。你可以探索它们。是的,我试过了,它适用于嵌套的json对象,但不适用于json对象的多级数组。类似这样的内容-使用gin在患者身上创建索引idxginp((参考资料->'maritalStatus'>'coding')jsonb_path_ops)
有没有办法索引这个嵌套数据?@Jitendra:是的,正如我所说,有一些选项,例如使用GIN
索引。你可以探索它们。是的,我试过了,它适用于嵌套的json对象,但不适用于json对象的多级数组。类似这样的内容-使用gin在患者身上创建索引idxginp((参考资料->'maritalStatus'>'coding')jsonb_path_ops)代码>