在表items
中,我有一个名为users
的jsonb列。 users
的JSON结构遵循以下示例:
[
{
"required": 1,
"agents": {
"user1": "A",
"user2": "P",
"user3": "A"
}
},
{
"required": 3,
"agents": {
"user1": "P",
"user4": "P",
"user5": "P"
}
}
]
请注意,表items
包含许多字段,但为了简单起见,我们可以认为它只有item_id
和users
字段。我在SO上看到的所有答案都提供了对数组内直接对象元素的查询。
我也希望能以更好的方式重写对象的结构,但在这种情况下,我不是我的决定:D。
我刚接触到postgres中的JSON查询,所以我尝试写一些查询但没有成功。
问题:
我正在尝试查找一个查询,该查询可以返回所有具有密钥“user4”的所有items
。在数组中任何元素的代理子对象内。有什么建议吗?
答案 0 :(得分:1)
使用函数jsonb_array_elements()
和?
运算符:
select i.*
from items i
cross join jsonb_array_elements(users)
where value->'agents' ? 'user4'