postgresql - 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 运算符,因此更容易解释),那就太好了。
解决方案
可以使用操作符从 JSON 对象(或数组)中删除键(或索引)-
。但是这个操作符不能影响 JSON 中的子对象。例如:
select jsonb '{"tag": "abc", "info": "xyz"}' -'info'
结果:{"tag": "abc"}
推荐阅读
- shell - 如何将文件名从本地变量传递到 ssh?
- ios - segue 缩小视图控制器。如何保持“正常”大小
- laravel - 使用数据透视表进行 Eloquent 查询
- unit-testing - 创建对象的新实例时如何将服务注入构造函数?
- json - 遍历 JSON 并创建 React 组件
- python - What does append(self) mean in Python classes?
- php - 如何在 Symfony 4 中正确调用带有实例的函数
- vba - 根据表格vba中的字体颜色隐藏列
- csv - Univocity bean 处理器在分布式系统中表现出不一致的行为
- javascript - KeystoneJS:如何过滤关系,基于另一个关系?