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

我使用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中,您可以构build以下JSON对象:

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

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

 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 ))