我正在使用带有nodejs和pg的PostgreSQL。 一切正常,但我想从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 });
}
});
答案 0 :(得分:1)
在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
))