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

How can I perform a map-reduce on filtered groups in RethinkDB?

我有一个由 Robinhood 股票订单组成的 RethinkDB table。相关字段是:

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

我只是想了解我的历史订单中每只股票的历史 P/L。

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

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')

这个 returns 像这样:

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

显然,我可以对 BUY 端执行相同的查询,这将告诉我所有采购订单的总成本(然后,理论上,我可以从每个采购订单中减去它以前的 SELL 个值)。

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

感谢您的宝贵时间。

您可以尝试将买单的倒数加到您的总和中:

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')