我将在RethinkDB中动态组合一系列具有完全相同结构的表。
我在数组中有动态生成的表列表,如下所示:
tables = [r.table('table1'), r.table('table2'), ...]
我正在尝试这样做:
r.union(r.args(tables))
但这只是给我一个错误: ReqlLogicError:预期类型为DATUM但找到了TABLE
总的来说,我还没有找到一种方法来生成JavaScript中的表列表,并添加使用r.union将它们组合成一个流。希望对此有所帮助。
谢谢!
答案 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'的值)。