0

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

r.db('testDB').table('funds').filter({userId:'63755d1e-e82e-4072-8312-4fcd88f1dfd3'}).group(function(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

4

1 回答 1

2

你可能想要这样的东西:

r.db('testDB').table('funds').group('userId').map(function(row) {
  return row('credit').default(0).sub(row('debit').default(0));
}).sum()
于 2016-06-20T08:38:46.033 回答