高级 Postgres JSON 查询技巧

NoSQL 入门

Jake Roach

Data Engineer

查询嵌套 JSON 数据

SELECT
    parent_meta -> 'jobs' ->> 'P1' AS jobs_P1,
    parent_meta -> 'jobs' ->> 'P2' AS jobs_P2
FROM student;

$$

便于查询嵌套数据:

  • #>#>> 运算符
  • json_extract_pathjson_extract_path_text 函数
NoSQL 入门

#> 与 #>> 运算符

两个表:左侧为文档数据,右侧用哈希箭头与双哈希箭头运算符提取的多个字段。

#> 运算符

  • 作用于列,接收字符串数组
  • 路径不存在返回 null
  • #>> 以文本返回字段

$$

SELECT
    parent_meta #> '{jobs}' AS jobs,
    parent_meta #> '{jobs, P1}' AS jobs_P1,
    parent_meta #> '{jobs, income}' AS income,
    parent_meta #>> '{jobs, P2}' AS jobs_P2
FROM student;
NoSQL 入门

json_extract_path 和 json_extract_path_text

json_extract_path

  • 提供列名与任意字段列表
  • 路径不存在返回 null
  • json_extract_path_text

$$

SELECT
  json_extract_path(parent_meta, 'jobs') AS jobs,
  json_extract_path(parent_meta, 'jobs', 'P1') AS jobs_P1,
  json_extract_path(parent_meta, 'jobs', 'income') AS income,
  json_extract_path_text(parent_meta, 'jobs', 'P2') AS jobs_P2,
FROM student;

两个表:左侧为文档数据,右侧用 json_extract_path 与 json_extract_path_text 函数提取的多个字段。

NoSQL 入门

复习

SELECT
    <column-name> #> '{<field-name>}' AS <alias>,
    <column-name> #> '{<field-name>, <field-name>}' AS <alias>,
    <column-name> #>> '{<field-name>, <field-name>}' AS <alias>
FROM <table-name>;
SELECT
  json_extract_path(<column-name>, '<field-name>') AS <alias>,
  json_extract_path(<column-name>, '<field-name>', '<field-name>') AS <alias>,
  json_extract_path_text(<column-name>, '<field-name>', '<field-name>') AS <alias>
FROM <table-name>;
NoSQL 入门

Passons à la pratique !

NoSQL 入门

Preparing Video For Download...