在带有 changefeed 的 rethinkdb 中使用地理空间命令

Using geospatial commands in rethinkdb with changefeed

现在有个小问题:

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

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() 一起使用吗(在文档中找不到与此相关的任何内容……)还是我必须放弃使用 rethinkdb 地理空间功能和只需使用 change() 来获取所有添加或更改的文档,并在 rethinkdb 之外进行地理空间处理?

您不能将 .getIntersecting.changes 一起使用,但您可以通过添加 filter after [ 来编写基本相同的查询=12=] 检查 loc 是否在圆圈内。虽然 .changes 限制了您可以在 .changes 之前编写的内容,但您基本上可以在 .changes 之后编写任何查询,并且它会起作用。

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

基本上,每次 table 发生变化时,更新都会推送到变更源,但会被过滤掉。由于对地理空间和 changfeeds 的支持不多,这或多或少是您需要将两者集成的方式。

将来,changefeeds 将更加广泛,您基本上可以编写任何以 .changes 结尾的查询。