在 RethinkDB 网站的 concatMap api 页面上,它说 eqJoin 是用 concatMap + getAll 实现的,它应该提供比其他连接更好的性能。
就我而言,我想加入多个表,这是一个示例,假设我有 3 个表users
,departments
和companies
。在每个user
文档中都会包含一个department id
和company id
。例如:
var user = {
name: 'Peter',
company: '12345',
department: '8888',
otherDetails: 'abc 123'
}
我想在连接查询后得到的结果与 concatMap/eqJoin 的结果非常相似,但包含所有 3 个表:
[{
user: {...},
company: {...},
department: {...}
}, ...]
这是我写的一个可以得到结果的查询:
r.table('users')
.concatMap(function(user) {
return r.table("companies").getAll(
user("company")
).map(function(company) {
return { user: user, company: company }
})
})
.concatMap(function(row) {
return r.table("departments").getAll(
row("user")("department")
).map(function(department) {
return { user: row("user"), company: row("company"), department: department }
})
})
我的问题:
- 有一个更好的方法吗?
- 上述查询的性能是否仍然与 2 个表上的通常 eqJoin 一样好?
- 在这些情况下,使用合并的性能是否比使用 eqJoin (concatMap) 差得多?
非常感谢。