如何在rethinkdb中实现innerjoin的条件

时间:2016-08-02 10:27:56

标签: node.js rethinkdb rethinkdb-javascript

我有这个问题:

 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中的时间戳字段中添加条件。

我在时间戳字段上创建了一个索引。

这就是我的猜测:

  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"})

从rethinkdb收到的错误如下:

  

e:预期类型TABLE_SLICE但找到了SEQUENCE:   价值序列:
  r.db(" test")。table(" users")。getAll(" amazon_11",{" index":&#34 ; parent"})。innerJoin(r.table(" posts"),function(var_43,var_44){return var_43(" employeeId")。eq(var_44(&#) 34; employeeId"));})。zip()。innerJoin(r.table(" posts_facebook"),function(var_45,var_46){return var_45(" id" ).eq(var_46(" post_id"));})。zip()。之间(" 2016-08-01 11:31:40"," 2016- 08-01 11:32:00",{"索引":" approvedAt"})
  日期格式为:YYYY-MM-DD h:i:s

1 个答案:

答案 0 :(得分: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