2016-04-05 4 views
1

Я буду динамически комбинировать ряд таблиц с такой же структурой в RethinkDB.Объединение нескольких таблиц с r.union в RethinkDB

У меня есть динамически генерируемый список таблиц в массиве следующим образом:

tables = [r.table('table1'), r.table('table2'), ...] 

И я пытаюсь сделать это:

r.union(r.args(tables)) 

Но это просто дает мне ошибку: ReqlLogicError: Ожидаемый тип DATUM, но найден ТАБЛИЦА

В целом я не смог найти способ создания списка таблиц в JavaSc ript и добавить r.union, чтобы объединить их в поток. Поблагодарите помощь в этом.

Спасибо!

ответ

0

Вы можете использовать сокращение, чтобы сделать то, что хотите, мы объединяемся один за другим, например r.table (t1) .union (r.table (t2)). Union (r.table (t3)).

Как это:

[r.table('t1'), r.table('t2'), r.table('t3')].reduce(function(p, c) { 
    return p.union(c) 
}) 

Попробуйте из проводника данных.

+0

Это похоже на работу, спасибо! – lyzazel

0

Ответ предоставлен kureikain работ. Я все еще хочу, чтобы функциональность существовала в RethinkDB с помощью r.args() (мне кажется, что это будет соответствовать документации этой функции).

Кроме того, один важный наконечник касательно связан с этим вопросом: если вы хотите объединить несколько таблиц в поток через r.union(), но сможете определить, в какой таблице он находится в результатах, используйте merge(). Так что мой запрос будет выглядеть следующим образом:

[r.db('database').table('table1').merge({source: 'table1'}), r.db('database').table('table2').merge({source: 'table2'})].reduce(function(p, c) { return p.union(c) }).filter(...) 

Это позволяет не только объединить несколько таблиц в один поток, но всегда различать исходные таблицы в результатах (путем поиска значения ключа " источник').

 Смежные вопросы

  • Нет связанных вопросов^_^