2016-09-12 3 views
0

RethinkDB에서 여러 쿼리를 여러 데이터베이스 테이블에 연결하려고합니다. 이 아이디어는 기존 dB에 대한 저장된 procs와 동일합니다. 기본적으로 장치에 연결된 모든 사용자를 쿼리 한 다음 각 사용자에 대해 규칙 테이블에서 첨부 된 규칙을 얻으려고합니다. 다음은 내가 작성중인 ReQL 쿼리의 요지입니다. 그러나 forEach는 쓰기 쿼리를 원하고 읽지 않기 때문에 작동하지 않으며 do()도 실패합니다. 어떤 제안?ReathinkDB : 체인으로 여러 테이블 쿼리

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

나는 RethinkDB의 여유 채널에서 도움을 받아 해결했습니다.

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

는 기본적으로 개체가지도를 사용하여 다음 coercedTo 및 배열 등을하고 우리가 여러 개의 DB를 쿼리 달성 할 수있는 기능을 수행 할 필요를 반환 : 여기

는 코드입니다.