如何在 RethinkDB 中对过滤组执行 map-reduce?
How can I perform a map-reduce on filtered groups in RethinkDB?
我有一个由 Robinhood 股票订单组成的 RethinkDB table。相关字段是:
side
(buy
或 sell
)
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')
我有一个由 Robinhood 股票订单组成的 RethinkDB table。相关字段是:
side
(buy
或 sell
)
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')