You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres jsonb如何实现类似Mongo的投影查询?

在PostgreSQL的jsonb中保留嵌套结构提取指定字段

你可以通过两种常见方式实现保留address.street的嵌套结构输出:

方法一:手动构造JSON结构

使用jsonb_build_object逐层构建需要的嵌套结构,精准控制输出内容:

SELECT jsonb_build_object(
    'address', 
    jsonb_build_object('street', myjsonbcolumn->'address'->'street')
) AS result
FROM "sometable";

这里通过两次jsonb_build_object,先构造内层的{street: ...},再把它包裹到address键下,最终得到你需要的嵌套JSON结构。

方法二:移除不需要的字段

如果address对象里除了street只有少量其他字段(比如示例里的postalCode),可以先取出整个address对象,再移除不需要的键:

SELECT jsonb_build_object('address', myjsonbcolumn->'address' - 'postalCode') AS result
FROM "sometable";

-操作符会从jsonb对象中删除指定的键,这样就只剩下street字段,再通过jsonb_build_object把它放到address键下,效果和方法一一致。

为什么你之前的查询不行?

你执行的SELECT myjsonbcolumn->'address'->'street' FROM "sometable",本质是直接提取了street字段的值(jsonb类型的字符串),没有保留外层的address层级,所以返回的是扁平的结果。上面两种方法都是通过重新构造或过滤的方式,保留了需要的嵌套结构。

内容的提问来源于stack exchange,提问作者nodejsThomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:18:14