首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql路径功能

postgresql路径功能
EN

Stack Overflow用户
提问于 2018-04-03 10:29:47
回答 1查看 10.6K关注 0票数 2

文档中,一些postgresql函数使用json 路径属性。例如,jsonb_set函数:

代码语言:javascript
复制
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])

我找不到这类属性的任何规格说明。

例如,它可以用于根据数组的属性值检索数组元素吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 21:55:24

路径类似于文件系统上的路径:每个值沿着树的叶子(按您指定的顺序)进一步挖掘。一旦您通过路径提取特定的JSONB值,您就可以在需要时链接其他JSONB操作。当存在嵌套的JSONB对象时,使用带有JSONB路径的函数/运算符非常有用,但也可以处理简单的JSONB数组。

例如:

代码语言:javascript
复制
SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c}' -> 1;

...should返回2。

路径{b,c}首先获得b的值,即{"c":1,2,3}。接下来,它深入获取c的值,即1、2、3。然后将->操作链接到c值上,得到数组指定索引处的值(使用基数为零的表示法,这样0是第一个元素,1是第二个元素,等等)。如果使用->,它将返回一个带有JSONB数据类型的值,而->>将返回一个带有文本数据类型的值。

但你也可以这样写:

代码语言:javascript
复制
SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c, 1}';

...and简单地将键和数组索引包含在相同的路径中。

对于数组,以下两个应该是等价的,除非第一个使用路径,第二个则需要数组并在指定的索引处获取值:

代码语言:javascript
复制
SELECT '[1, 2, 3]'::JSONB #> '{1}';

SELECT '[1, 2, 3]'::JSONB -> 1;

请注意,路径必须始终采用JSON数组语法,其中每个连续值都是要钻研到的树中的下一个叶。如果它是JSONB对象,则提供键;如果它是JSONB数组,则提供索引。如果这些是文件路径,则JSONB键类似于文件夹,数组索引类似于文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49627813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档