2016-08-02 54 views
0

上innerjoin條件我有這個疑問:
如何實現rethinkdb

r.db('test').table('users').getAll("amazon_11",{index:"parent"}) 
    .innerJoin(r.table("posts"),function (posts, user) {return posts("employeeId").eq(user("employeeId"));}).zip() 
    .innerJoin(r.table("posts_facebook"),function(left,right){return left('id').eq(right('post_id'))}).zip() 

我想收集posts_facebook在時間戳字段添加一個條件。

我在時間戳字段上創建了一個索引。

這是我的猜測是:從rethinkdb收到

r.db('test').table('users').getAll("amazon_11",{index:"parent"}) 
    .innerJoin(r.table("posts"),function (posts, user) {return posts("employeeId").eq(user("employeeId"));}).zip() 
    .innerJoin(r.table("posts_facebook"),function(left,right){return left('id').eq(right('post_id'))}).zip() 
    .between(fromDate,toDate,{index:"approvedAt"}) 

錯誤如下:

E:預期類型TABLE_SLICE卻發現順序: 值序列中:
[R .db(「test」)。table(「users」)。getAll(「amazon_11」,{「index」:「parent」})。innerJoin(r.table(「posts」),function(var_43,var_44){返回var_43(「employeeId」)。eq(var_44(「employeeId」));})。zip()。innerJoin(r.table(「posts_facebook」),f unction(var_45,var_46){return var_45(「id」)。eq(var_46(「post_id」)); (「2016-08-01 11:31:40」,「2016-08-01 11:32:00」,{「index」:「approvedAt」})
日期格式是:YYYY-MM-DD H:我:■

+0

您好,歡迎來到[SO]。請抽出時間參加[導覽]並訪問[幫助]。您可能還想閱讀[問]。 – Sampada

回答

0

如果你已經在使用innerJoin,我只想把在第二innerJoin.innerJoin(r.table("posts_facebook"),function(left,right){return left('id').eq(right('post_id')).and(right('approvedAt').gt(fromDate)).and(right('approvedAt').lt(toDate));})的身體。請注意,innerJoin在大型桌子上的速度會很慢,因此您可能需要考慮使用concatMap來代替。

+0

我如何將一個基於索引的子句放在子查詢中而不是gt和lt函數中,我已經在日期字段(approvedAt)上創建了一個索引。 – user284873

+0

你不能。如果可以的話,它不會使查詢更快:'innerJoin'必須查看每個文檔,因此索引無法加速查詢。如果重寫了查詢以在'concatMap'內部使用'concatMap'和'between',則可以使用'between'之間的索引。 – mlucy