json - PostgreSQL和nodejs/pg,返回嵌套的JSON

标签 json node.js postgresql pg

我正在将 PostgreSQL 与 Nodejs 和 pg 一起使用。 一切正常,但我想将 PostgreSQL 的结果作为嵌套 json 输出 - 就像我正在使用 MongoDB 或类似的东西一样。

我来自 PostgreSQL 的 2 个表是:

portfolio (id int, name text)

cars (portfolio_id int, name text);

是否有返回具有以下结构的 JSON 对象的“正确”方法:

{
    { name: 'Portfolio #1', cars: { name: 'Car #1', name: 'Car #2' },
    { name: 'Portfolio #2', cars: { name: 'Car #3' }
}

我在nodejs/pg中查询数据库的一般方法是:

client.query('SELECT ...', [params], function(err, result) {
    done();
    if (err) {
        res.status(500).json({ error: err });
    } else {
        res.json({ portfolios: result.rows });
    }
});

最佳答案

在 PostgreSQL 中,您可以构建以下 JSON 对象:

[
    { "name": "Portfolio #1", "cars": [ "Car #1", "Car #2" ] },
    { "name": "Portfolio #2", "cars": [ "Car #3" ] }
]

您可以使用以下查询从表构建对象:

select array_to_json(array(
  select row_to_json(n)
  from portfolio p
  left join lateral (select p.name, array(select name from cars where portfolio_id = p.id) as cars) n on true
  ))

并且包含 cars.votes 字段:

select array_to_json(array(
  select row_to_json(n)
  from portfolio p
  left join lateral (select p.id, p.name, array_to_json(array(
     select row_to_json((select a from (select c.name, c.votes) a))
     from cars c
     where portfolio_id = p.id)) as cars) n on true
  ))

关于json - PostgreSQL和nodejs/pg,返回嵌套的JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37021837/

相关文章:

node.js - 为什么我的错误论点不被视为错误?

node.js - nodejs/express 应用程序的翻译/本地化工作流程

node.js - 如何在nodejs中将 'select if'函数与sequ​​elize一起使用

postgresql - postgres SQL 状态 : 22P02

json - 如何安全地使用用户提供的 JSON 文本?

c# - 序列化 JSON 时忽略空值

java - 验证 JSON 对象中的值是否具有特殊字符

java - Struts 2 JSON插件和通配符问题

mysql - 套接字被发出,但是数据没有显示在 Highcharts 样条中

postgresql - Postgres 需要显式提供主键,尽管类型是串行的