在RethinkDB中将多个表与r.union组合

时间:2016-04-05 13:40:39

标签: rethinkdb rethinkdb-javascript

我将在RethinkDB中动态组合一系列具有完全相同结构的表。

我在数组中有动态生成的表列表,如下所示:

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

我正在尝试这样做:

r.union(r.args(tables))

但这只是给我一个错误: ReqlLogicError:预期类型为DATUM但找到了TABLE

总的来说,我还没有找到一种方法来生成JavaScript中的表列表,并添加使用r.union将它们组合成一个流。希望对此有所帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用reduce来做你想要的,我们一个接一个地合并,比如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)
})

从数据资源管理器中试用。

答案 1 :(得分: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( ...)

这使您不仅可以将多个表组合成一个流,而且可以始终区分结果中的源表(通过查找键'source'的值)。