如何在RethinkDB中对过滤后的组执行map-reduce?

时间:2017-01-23 21:42:56

标签: javascript sql rethinkdb reql

我有一个由Robinhood Stock Orders组成的RethinkDB表。相关领域是:

sidebuysell
state(我只是在寻找filled个订单)
price(订单的平均美元价格)
quantity(已售出或购买的股数)

我只是想了解订单历史中每只股票的历史盈亏。

我有以下工作查询,它​​告诉我所有卖出订单的价格,按股票代码分组:

r.db('robinhood').table('orders').filter({side: 'sell', state: 'filled'})
 .map(function(order) { 
   return {
     cost: (order('price').coerceTo('number')).mul(order('quantity').coerceTo('number')),
     symbol: order('symbol')
   }
}).group('symbol').sum('cost')

返回如下内容:

[{"group":"AA","reduction":491},{"group":"AAPL","reduction":10589},{"group":"ABEO","reduction":7596.16},...]

显然,我可以对BUY方做同样的查询,这会告诉我所有采购订单的总成本(然后,理论上,我可以从之前的每一个中减去这个{ {1}}值)。

简而言之,如何使用ONE ReQL查询从每个股票代码的SELL订单总值中减去每个股票代码的BUY个订单总值?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您可以尝试将买入订单的反向值添加到您的总和中:

r.db('robinhood').table('orders').filter({state: 'filled'})
 .map(function(order) { 
   return {
     cost: order('price').coerceTo('number')
           .mul(order('quantity').coerceTo('number'))
           .mul(r.branch(order('side').eq('sell'), 1, -1)),
     symbol: order('symbol')
   }
}).group('symbol').sum('cost')