我尝试使用连接
监控查询的更改r.table("presence").innerJoin(r.table('authors'), function(presence, author){
return r.expr(author('highlights')).contains(presence('name'));
}).getField('left').changes()
我收到以下错误
e: Cannot call `changes` after `concat_map` in:
r.table("presence").innerJoin(r.table("authors"), function(var_115, var_116) { return var_116("highlights").contains(var_115("name")); }).getField("left").changes()
是合法的,哪个部分是concat_map
?
答案 0 :(得分:0)
我认为innerJoin
是concat_map
之上的糖语法。实际上,您始终可以使用concatMap
来解决加入问题。
很遗憾,根据https://rethinkdb.com/docs/changefeeds/ruby/
,您无法在changes
之后使用concatMap
我们有一个问题需要跟踪这个问题,它可能会落在2.3或2.4中,正如他们所说的那样。 https://github.com/rethinkdb/rethinkdb/issues/3997
是的,此时此changes
之后您无法使用join
。
然而,我试图进一步研究是否可以制作出可行的东西。试试吧。
根据我的理解,您有一个presence
表,您的联接实际上用作过滤器/ author. highlights
包含presence.name
,然后听取它的更改。如何先尝试获取更改,然后再调用filter
来过滤掉数据。像这样:
r.table("presence")
.changes()
.map(function(change) {
return change('new_val')
})
.filter(function(change) {
return r.table('authors').filter(function(author) {
return author('highlights').contains(change('name'))
}).count().gt(0)
})
请注意,此查询未进行优化。如果它适合您,我们可以继续添加索引以使其运行更快。