1

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

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

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

我正在尝试这样做:

r.union(r.args(tables))

但这只是给我一个错误:ReqlLogicError: Expected type DATUM but found TABLE

总的来说,我还没有找到一种方法来在 JavaScript 中生成表列表并添加使用 r.union 将它们组合成一个流。将不胜感激这方面的帮助。

谢谢!

4

2 回答 2

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( ...)

这使您不仅可以将多个表组合到一个流中,还可以始终区分结果中的源表(通过查找键“源”的值)。

于 2016-04-05T23:08:46.210 回答
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)
})

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

于 2016-04-05T19:57:48.373 回答