knex postgres 连接为嵌套 JSON

Tri*_*ara 2 sql postgresql knex.js

我将 knex 与 postgresql db 一起使用,表 A 中有一行与表 B 中的行具有一对一关系,与表 C 中的行具有一对多关系。

我想将 A 与 B 和 C 加入一行并得到一个像这样的 json

{
  aCol1: ...,
  b: {
    bCol1: ...,
    bCol2: ...,
  },
  c: [
    {
      cCol1: ...
    },
    {
      cCol1: ...
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

其中类似的内容aCol表示表 A 中的列,bCol- 表 B 中的列,这是联合的。

如何通过一个查询和连接来实现这一目标?

小智 5

为此使用 JsonAgg

SQL:

从“tA”中选择 tA.id、tA.name、json_agg(tB) 作为 tB 在“tA”上左连接“tB”。“tB_id”=“tB”.“id”按“tA”.“id”分组, “tA”.“姓名”

膝关节:

db('tA')
.leftJoin('tA', 'tA.tB_id', 'tB.id')
.groupBy(['tA.id', 'tA.name'])
.select(db.raw(`tA.id,tA.name,json_agg(tB) as tB`))
Run Code Online (Sandbox Code Playgroud)