我将以下对象保存在Postgres数据库的jsonb列中。
{
"method": "method",
"drive": [
{
"name": "C_Drive",
"key": [
{
"is_active": true,
"created_at": "2023-01-01T00:00:00",
"id": 3,
"value": "value3"
},
{
"is_active": false,
"created_at": "2022-12-01T00:00:00",
"id": 2,
"value": "value2"
},
{
"is_active": false,
"created_at": "2022-11-01T00:00:00",
"id": 1,
"value": "value1"
}]
},
{
"name": "D_Drive",
"key": [
{
"is_active": true,
"created_at": "2023-01-01T00:00:00",
"id": 4,
"value": "value4"
}
}]
}
我想删除驱动器内的一个特定密钥。假设我想删除“id”= 3的密钥。我该怎么做?
1条答案
按热度按时间ddrv8njm1#
回答您最初的问题:
我想查询一个驱动器的所有键,这些键是is_active = false,并且在基于created_at desc的驱动器的非活动键中排名〉1。
例如:在上面的示例中,我只希望结果中的密钥ID = 1。因为它处于非活动状态,并且created_at比C驱动器中其他非活动密钥(key2)的created_at更旧
前半部分直接转换为
jsonb_path_query()
中的jsonpath
表达式,只剩下created_at
的降序需要使用row_number()
窗口函数或order by
与offset 1
处理,以跳过第一部分:online demo.编辑后,回答您的新问题:您可以首先使用custom function:
然后根据您的条件选择一个并将其用于
#-
运算符:online demo它非常灵活,但效率很低,尤其是对于大而复杂的
jsonb
值。