首页 > 解决方案 > postgresql 仅从 JSONB 数据类型中选择一些子键

问题描述

给定下表和数据:

CREATE TABLE test (  
  slots jsonb
);

INSERT INTO test VALUES ('{"0": {"tag": "abc", "info": "xyz"}, "1": {"tag": "def", "info": "uvw"}}');

现在我想检索 的值tag但对info. 如果我做一个基本的SELECT,我会得到一切:

SELECT slots FROM test;
{"0": {"tag": "abc", "info": "xyz"}, "1": {"tag": "def", "info": "uvw"}}

而我想要的只是:

{"0": {"tag": "abc"}, "1": {"tag": "def"}}

是的,我可以从表中检索所有内容,然后从中获取我想要的内容,但我想看看是否可以不首先提取不需要的数据。

如果有办法只检索我需要的位,那么如果这可以利用 postgresql 14 中引入的任何新运算符(这似乎更类似于实际的 JSON 运算符,因此更容易解释),那就太好了。

标签: postgresql

解决方案


可以使用操作符从 JSON 对象(或数组)中删除键(或索引)-。但是这个操作符不能影响 JSON 中的子对象。例如:

select jsonb '{"tag": "abc", "info": "xyz"}' -'info'

结果:{"tag": "abc"}


推荐阅读