2016-06-20 2 views
0

Я использую rethinkdb с nodejs. У меня есть таблица фондов, и я пытаюсь рассчитать баланс любого пользователя, добавив все кредитные записи минус итоговые дебетовые записи. До сих пор мне удалось запустить следующий запрос.rethinkdb группировка для расчета баланса средств пользователя

r.db ('TESTDB') таблица ('средства') фильтра... ({Идентификатор пользователя: '63755d1e-e82e-4072-8312-4fcd88f1dfd3'}) группа (функция (г) { возвращение г ('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') 

}) 

е: Не удается преобразовать строку в ПОСЛЕДОВАТЕЛЬНОСТЬ в:

другой приближается с помощью снижения функции обеспечивает мне суммировать для всех кредитных заявок, но я не знаю, как суммировать все дебет.

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

ответ

2

Вы, вероятно, хотите что-то вроде этого:

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

У меня есть таблица пользователей с Ид собственности пожалуйста, вы можете сказать мне, как я могу присоединиться результат вашей QUERTY к чтобы я мог вытащить электронную почту, телефон и другую информацию. Также по умолчанию укажите значение, если какое-либо свойство недоступно в документе. как в вашем коде 0 будет введено для кредитного поля, если оно отсутствует? – najam

+0

В конце вы можете поместить '.ungroup(). Merge (function (x) {return {user: r.table ('users'). Get (x ('group'))};})'. (И да, 'default' предоставляет значение по умолчанию, если поле отсутствует, или, более конкретно, если какая-либо несуществующая ошибка возникает при оценке ее левой стороны.) – mlucy

Смежные вопросы