[英]Update object field of element in array jsonb with postgres
[英]Query an array element in an JSONB Object
我在名为reports
的表中有一个名为data
的jsonb
列。 这是report.id = 1
样子
[
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Food123"
},
{
"productIDs": [
"EFG1"
],
"groupID": "Electronic123"
}
],
"Package": [
{
"groupID": "Electronic123"
}
],
"type": "Produce"
},
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Clothes123"
}
],
"Package": [
{
"groupID": "Food123"
}
],
"type": "Wearables"
}
]
这是report.id = 2
样子:
[
{
"Product": [
{
"productIDs": [
"XYZ1",
"XYZ2"
],
"groupID": "Food123"
}
],
"Package": [],
"type": "Wearable"
},
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Clothes123"
}
],
"Package": [
{
"groupID": "Food123"
}
],
"type": "Wearables"
}
]
我正在尝试获取reports
表中所有条目的列表,其中至少有一个data
列的元素具有以下内容: type
= Produce
AND 其中Product
数组的任何元素或Product
数组的groupID
任何元素以Food
开头
因此,从上面的示例中,此查询将只返回第一个索引,因为
Produce
Food
开头,作为Product
数组的第一个元素第二个索引将被过滤掉,因为类型不是Produce
。
我不确定如何查询对groupID
进行 AND 查询。 这是我尝试获取Produce
类型的所有条目的内容
select * from reports r, jsonb_to_recordset(r.data) as items(type text) where items.type like 'Produce';
示例结构和结果: dbfiddle
select r.*
from reports r
cross join jsonb_array_elements(r.data) l1
cross join jsonb_array_elements(l1.value -> 'Product') l2
where l1 ->> 'type' = 'Produce'
and l2.value ->> 'groupID' ~ '^Food';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.