![](/img/trans.png)
[英]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.