rethinkdb分组以计算用户资金余额

时间:2016-06-20 08:17:19

标签: rethinkdb rethinkdb-javascript

我正在使用带有nodejs的rethinkdb。我有一个资金表,我试图通过添加所有信用条目减去总借记条目来计算任何用户的余额。到目前为止,我能够运行以下查询。

r.db( 'TESTDB')表( '资金')滤波器({用户名: '63755d1e-e82e-4072-8312-4fcd88f1dfd3'})。组(函数(G){     return g('userId') })

这将产生以下结果。

[
{
"group":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3" ,
"reduction": [
{
"createdAt": Mon Jun 06 2016 14:17:26 GMT+00:00 ,
"createdBy":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3" ,
"credit": 900 ,
"id":  "2afaca8e-6b4f-4ed5-a8ef-7fed3ce5ca67" ,
"userId":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3"
} ,
{
"createdAt": Fri Jun 17 2016 09:02:19 GMT+00:00 ,
"createdBy":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3" ,
"credit": 150 ,
"id":  "c023ea2d-0d28-4f4b-ae6c-1c41c49aca08" ,
"userId":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3"
} ,
{
"createdAt": Fri Jun 17 2016 08:54:56 GMT+00:00 ,
"createdBy":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3" ,
"debit": 50 ,
"id":  "89fd4a56-8722-4e86-8409-d42e4041e38d" ,
"userId":  "63755d1e-e82e-4072-8312-4fcd88f1dfd3"
}
]
}
]

我曾尝试使用concatMap函数和内部尝试使用分支来检查它的借记或贷记,但它不起作用。

this throwing errors
r.db('testDB').table('funds').filter({userId:'63755d1e-e82e-4072-8312-4fcd88f1dfd3'}).group(function(g){
    return g('userId')
}).ungroup().concatMap(function(m){
   //return m('reduction')('credit')
     return r.branch (m('reduction')('credit').gt(0), 'c', 'd')

})

e:无法将STRING转换为SEQUENCE:

使用reduce函数的另一个接近为我提供了所有信用条目的总和,但我不知道如何将所有借记加起来。

r.db('testDB').table('funds').filter({userId:'63755d1e-e82e-4072-8312-4fcd88f1dfd3'}).group(function(g){
    return g('userId')
}).ungroup().concatMap(function(m){
   return m('reduction')('credit')
    // return r.branch (m('reduction')('credit').gt(0), 'c', 'd')

})
  .reduce(function(left, right){
         return left.add(right);
    })

结果是1050

1 个答案:

答案 0 :(得分:2)

你可能想要这样的东西:

r.db('testDB').table('funds').group('userId').map(function(row) {
  return row('credit').default(0).sub(row('debit').default(0));
}).sum()
相关问题