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
相关产品推荐
相关产品推荐

