跳转到主要内容
模块 15 · 第 2 课(共 2)课程中的57/57~15 min
模块课程(2/2)

JSON 聚合函数

JSON 聚合函数

集成是双向的。数据库不必将自身限制为解析 JSON:它可以构建它。想象一下,如果您的 API 和 Node.js 不必执行将嵌套对象序列化为 JSON 的肮脏、密集的工作,因为数据库已经直接从磁盘构建了它们。

构建对象和数组

我们不再使用经典的质量聚合或字符串连接 (String_agg),而是使用这些函数:

  • json_build_object(key, value, ...) 或 jsonb_build_object(...)
  • json_agg(...) 或 jsonb_agg(...)
SQL
SELECT json_build_object('name', first_name, 'city', city) AS data
FROM customers;

您将看到打印的行包含 { "name": "...", "city": "..." },完全符合要求。

锻炼#sql.m15.l2.e1
尝试:0加载中...

从“customers”表中,以 JSON 行的形式返回数据,并使用 \`json_build_object\` 进行映射。映射两个键:“name”绑定到“first_name”,“mail”绑定到“email”。使用 \`AS customer_doc\` 作为该列。

正在加载编辑器...
显示提示

json_build_object('姓名', 名字, '邮件', 电子邮件)

3 次尝试后可用的解决方案

锻炼#sql.m15.l2.e2
尝试:0加载中...

对于每个订单 (\`order_id\`),在单个单元中构建其包含的所有 \`product_id\`。从“order_items”表中,运行“GROUP BY order_id”。然后选择“order_id”并将“product_id”数据累积到 JSON 数组 (JSON_AGG) 中。将数组命名为 \`products\`。

正在加载编辑器...
显示提示

JSON_AGG(product_id) 加上经典的 group by 来收集数据。

3 次尝试后可用的解决方案