knex postgres加入为嵌套JSON

时间:2018-10-17 15:50:35

标签: sql postgresql knex.js

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

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

{
  aCol1: ...,
  b: {
    bCol1: ...,
    bCol2: ...,
  },
  c: [
    {
      cCol1: ...
    },
    {
      cCol1: ...
    }
  ]
}

aCol之类的东西表示表A中的列,bCol-表B中的列是联合的。

如何通过一个查询并加入来实现?

2 个答案:

答案 0 :(得分:0)

为此使用JsonAgg

SQL:

选择 tA.id, tA.name, json_agg(tB)as tB 从 “ tA” 左加入“ tB” “ tA”。“ tB_id” =“ tB”。“ id” 通过...分组 “ tA”。“ id”, “ tA”。“名称”

Knex:

Stripe::Subscription.create({
  customer: customer.id,
  items: [
    {price: plan.id},
  ],
})

答案 1 :(得分:-1)

您可以通过一个查询和联接来实现它,但是它变得过于复杂。您应该改为使用ORM。

Objection.js基于knex,可让您以琐碎而高效的方式进行此类查询(您可以选择使用联接或多个查询,通常,多个查询的性能更高)。

使用Objection.js语法,如下所示:

const res = await ATableModel.query().where('id',  a.id).eager('[b,c]');