我的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。 是否有执行左连接的特定功能?我读了自述文件,但不知道如何“连接”两个“表”。 谢谢!
答案 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
功能。 user
和order
被视为databases
而不是tables
。
如果您想使用user db
语法进行查询,则可以在lowdb
内创建订单。
如果您继续使用问题的数据结构,则可以执行以下操作:
const userIds = db('order').map('user_id');
const users = db('user').filter(user => !userIds.includes(user.id));
请注意,在这种情况下,您将首先查询所有userIds
。如果该数目很大,可能会导致性能问题。