ReathinkDB:​​使用链接查询多个表

时间:2016-09-12 12:17:21

标签: rethinkdb rethinkdb-javascript

在RethinkDB中,我试图将多个查询链接到多个数据库表。这个想法与传统dB的存储过程相同。基本上我查询连接到设备的所有用户,然后为每个用户尝试从规则表中获取附加的规则。 以下是我正在编写的ReQL查询的要点。但是forEach不起作用,因为它想要一个写查询而不是读取而且do()失败了。有什么建议吗?

const get_distance = function(location){

const final_location = 500;

return r.expr(500).sub(location);

};

​

const run_rule = function(device,distance){

return r.db('locationtracker_development').table('customer_details').filter(function(cust){

return cust("deviceId").contains(device);

}).pluck("userId").forEach(function(userName){

//TODO Work on each user

return r.db('locationtracker_development').table('user_rules').filter({'userId':userName('userId')});

});

};

r.do(get_distance(100)).do(function(dist){

return run_rule('gXtzAawbc6',dist);

});

1 个答案:

答案 0 :(得分:1)

我已经在RethinkDB的Slack Channel的帮助下解决了这个问题。

以下是代码:

const get_distance = function(location){
  const final_location = 500;
  return r.expr(500).sub(location);
};

const run_rule = function(device,distance){
  return r.db('locationtracker_development').table('customer_details').filter(function(cust){
    return cust("deviceId").contains(device);
  }).coerceTo('array').map(function(doc){
    return doc('userId');

  }).do(function(userIds){
    //return userIds;
    return r.db('locationtracker_development').table('user_rules').
      getAll(r.args(userIds),{index:'userId'});
  });
};
   r.do(get_distance(100)).do(function(dist){
      return run_rule('gXtzAawbc6',dist);
   });

基本上返回的对象需要被强制转换为Array,然后使用map和do功能,我们可以实现查询多个DB。