在RethinkDB網站的concatMap api頁面上,它表示eqJoin是用concatMap + getAll實現的,它應該比其他連接提供更好的性能。執行嵌套concatMap以實現連接多個表的最佳方法是什麼?
在我的情況下,我想加入多個表格,這裏是一個例子,我們假設我有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)差得多嗎?
非常感謝。
非常感謝Michael! // 1.我將'concatMap's一起移動,因爲它會更短(只有一個'map'),並且對我更加一致(map中的變量)// 2.完美! // 3.我明白你的意思,'concatMap'正在返回我現在需要的這種情況。在RethinkDB上閱讀更多關於'merge'和'concatMap'的東西,並且在再次尋求幫助之前先思考我要做的事情。 //再次感謝您的快速回答! :) – oldlam