2015-05-30 55 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來編寫任何查詢。