PostgreSQL:从包含 json 个对象的数组中删除 key/value 对

PostgreSQL: Delete key/value pair from array with json objects

我有一个 table:

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 对象中删除 email 字段(键 + 值)。

我尝试了以下解决方案,虽然它确实执行了,但对数组根本没有任何影响:

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

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

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

路径元素 {1,email} 可能会替换为 {-1,email}负整数从末尾开始计算)。

Demo

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

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

(online demo)