#>之间有什么区别?和 - >> PostgreSQL中的运算符?

时间:2014-01-20 21:48:59

标签: json postgresql postgresql-9.3

我们可以使用->->>运算符访问PostgreSQL 9.3中的任何JSON元素。在我看来,#>#>>只提供了编写JSON路径的较短形式。或者#>运营商背后是否有更大的图片?它是否有特殊用途/提供箭头符号的任何优势?哪一种是写入路径的优先方法?

这一切都是为了问题:我为什么要在#>#>>上使用->->>运算符?

The docs对此有点神秘。

以下两个查询都给出了相同的结果:

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}';
 ?column? 
----------
 3

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json->'a'->>2;
 ?column? 
----------
 3

1 个答案:

答案 0 :(得分:4)

考虑嵌套。

{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}

想象一下,你有一个json文档,而你事先并不知道它将如何嵌套。如果你知道你需要一个三级路径,你可以写:

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json -> 'a' -> 'b' -> 'c';

但是如果你想编写一个事先不知道的查询呢?这就是基于路径的运算符有用的地方;路径可以与文档一起提供,并且不再对查询中的文档结构进行任何假设。

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json #>> ARRAY['a','b','c']