使用 rethinkDB 进行左连接查询
Left join query with rethinkDB
我有两个表,users
和 authors
。
用户可以是作者,如果是,在作者文档中有用户的 id
。
我要查询的是不是作者的所有用户。
等效的 mySQL 查询类似于
select * from users left join authors on users.id=authors.userId
where authors.userId is null
我试过的是
r.db('journa').table('authors').outerJoin(
r.db('journa').table('users'),
(author, user) => {
return author.hasFields({'left': 'claimedByUserId'}).not()
}
)
但它不起作用。
知道如何实现它吗?
你几乎走对了路。您不应该在连接表达式中反转,因为它将 return 一组所有不匹配的排列,您将无法检测到所需的匹配项。以下查询似乎可以完成您的需要:
r.db('journa')
.table('users')
.outerJoin(
r.db('journa').table('authors'),
// This is what two sequences are joined upon
(user, author) => user('id').eq(author('userId'))
)
// Joins return `left` and `right`.
// If there's nothing at the right side, we assume there was no match
.filter((lr) => lr.hasFields('right').not())
// Extracting the left table record only
.map((lr) => lr('left'))
我有两个表,users
和 authors
。
用户可以是作者,如果是,在作者文档中有用户的 id
。
我要查询的是不是作者的所有用户。 等效的 mySQL 查询类似于
select * from users left join authors on users.id=authors.userId
where authors.userId is null
我试过的是
r.db('journa').table('authors').outerJoin(
r.db('journa').table('users'),
(author, user) => {
return author.hasFields({'left': 'claimedByUserId'}).not()
}
)
但它不起作用。 知道如何实现它吗?
你几乎走对了路。您不应该在连接表达式中反转,因为它将 return 一组所有不匹配的排列,您将无法检测到所需的匹配项。以下查询似乎可以完成您的需要:
r.db('journa')
.table('users')
.outerJoin(
r.db('journa').table('authors'),
// This is what two sequences are joined upon
(user, author) => user('id').eq(author('userId'))
)
// Joins return `left` and `right`.
// If there's nothing at the right side, we assume there was no match
.filter((lr) => lr.hasFields('right').not())
// Extracting the left table record only
.map((lr) => lr('left'))