PostgreSQL:从带有json对象的数组中删除键值对



我有一个表:

CREATE TABLE movies( id text, data jsonb );
INSERT INTO movies(id, data) VALUES (
'1', 
{
"actors": [
{
"name": "actor1",
"email": "actor1@somemail.com"
},
{
"name": "actor2",
"email": "actor2@somemail.com"
}
]
}
);

我想要的是从actors数组的每个json对象中删除电子邮件字段(键+值(。

我尝试了以下解决方案,尽管它确实执行了,但对阵列没有任何影响:

update movies
set data = jsonb_set(data, '{actors}', (data->'actors') - '{actors, email}')
where id = '1';

要操作数组中的所有项,需要使用子查询:

UPDATE movies
SET data = jsonb_set(data, '{actors}', (
SELECT jsonb_agg(actor - 'email')
FROM jsonb_array_elements(data->'actors') actor
))
WHERE id = '1';

(在线演示(

您需要单独指定索引来删除数组元素email

update movies
set data = jsonb_set(data, '{actors}', data -> 'actors' #- '{0,email}' #- '{1,email}')
where id = '1';

路径元素CCD_ 2可以被CCD_。

演示

最新更新