与lowdb左连接

时间:2019-05-05 18:23:11

标签: javascript sql database

我的JSON数据库中有两个“表” /数组,即用户和订单。 看起来像这样:

{
  "user": [
    {
      "id": "1",
      "name": "test"
    },
    {
      "id": "2",
      "name": "test"
    },
    {
      "id": "3",
      "name": "test"
    }
  ],
  "order": [
    {
      "user_id": "1",
      "date_order": "2018-01-01",
      "end_order": "2018-01-05"
    },
    {
      "user_id": "2",
      "date_order": "2018-02-01",
      "end_order": "2018-02-05"
    }
  ]
}

我想检索所有未与他们相关联的订单的用户。 因此,在这种情况下,只有用户#3。 是否有执行左连接的特定功能?我读了自述文件,但不知道如何“连接”两个“表”。 谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在用户数组上使用filter(),并在find()数组上使用order,以检查用户数组中是否存在user_id与obj的ID相等的对象。

const obj = { "user": [ { "id": "1", "name": "test" }, { "id": "2", "name": "test" }, { "id": "3", "name": "test" } ], "order": [ { "user_id": "1", "date_order": "2018-01-01", "end_order": "2018-01-05" }, { "user_id": "2", "date_order": "2018-02-01", "end_order": "2018-02-05" } ] }

const res = obj.user.filter(x => !obj.order.find(a => a.user_id === x.id));
console.log(res);

答案 1 :(得分:0)

lowdb目前没有join功能。 userorder被视为databases而不是tables

如果您想使用user db语法进行查询,则可以在lowdb内创建订单。

如果您继续使用问题的数据结构,则可以执行以下操作:

const userIds = db('order').map('user_id');
const users = db('user').filter(user => !userIds.includes(user.id));

请注意,在这种情况下,您将首先查询所有userIds。如果该数目很大,可能会导致性能问题。