2015-05-30 21 views
1

现在我有一个小问题:在rethinkdb使用地理空间命令与changefeed

我想与rethinkdb的changefeed功能一起使用地理空间命令(如getIntersecting),但我总是得到:

RqlRuntimeError: Cannot call changes on an eager stream in: r.db("Test").table("Message").getIntersecting(r.circle([-117.220406,32.719464], 10, {unit: 'mi'}), {index: 'loc'})).changes()

最大的问题是:我可以使用getIntersecting和changes()(在docs btw中找不到与之相关的任何东西...),还是必须放弃使用rethinkdb地理空间要素的想法,并使用change )获取所有添加或更改的文档,并执行rethinkdb之外的地理空间信息?

回答

2

不能使用.getIntersecting.changes,但你可以通过添加实质上写同样的查询filter.changes来检查,如果该loc在这个圆圈内。虽然.changes限制了您在.changes之前可以写的内容,但您基本上可以在.changes之后编写任何查询,并且它将起作用。

r.table('Message') 
    .changes() 
    .filter(
    r.circle([-117.220406,32.719464], 10, {unit: 'mi'}) 
    .intersects(r.row('new_val')('loc')) 
) 

基本上,每当表格发生变化时,更新都会被推送到更换饲料,但它会被过滤掉。由于对地理空间和长距离进行的支持并不多,这或多或少地需要将这两者结合起来。

在未来,换刀的范围会更广泛,您最终可以基本上用.changes来编写任何查询。