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

10
我们可以使用PostgreSQL 9.3中的->->>运算符访问任何JSON元素。对我来说,#>#>>只提供了JSON路径的缩写形式。或者说,#>操作符背后有更大的含义吗?它是否具有特殊用途/比箭头符号提供任何优势?哪种方法是编写路径的首选方法?
最终问题归结为:为什么我应该在->->>之上使用#>#>>运算符? 文档对此有些晦涩。
以下两个查询都会产生相同的结果:
=> 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个回答

10
考虑嵌套。
{
  "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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接