на странице concatMap api на веб-сайте RethinkDB, он говорит, что 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 }
})
})
мои вопросы:
- есть ли лучший способ сделать это?
- - это выполнение вышеуказанного запроса, по-прежнему столь же хорошее, как обычно, eqJoin на 2 таблицах?
- является результатом использования слияния намного хуже, чем использование eqJoin (concatMap) в этих случаях?
спасибо большое.
спасибо большое Майкл! // 1. Я перемещаю 'concatMap' вместе, потому что это будет короче (только одна« карта ») и более согласованная мне (vars внутри' map') // 2. отлично! // 3. Я понял, что вы имеете в виду, 'concatMap' возвращает именно то, что мне нужно для этого случая. собираюсь прочитать больше материалов о 'merge' vs' concatMap' в RethinkDB и подумать о том, что мне нужно сделать, прежде чем снова обратиться за помощью. // Большое спасибо за быстрый ответ! :) – oldlam