我有一个表:
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_。
演示