我有以下pairModel收集模式:
[{
"_id" : ObjectId("5afaf31c8e7cd4d7e5675f17"),
"trans_id" : 2910372,
"fill_qty" : 3275466,
"fill_price" : 610600,
"fill_flags" : 2,
"currencyPair" : "BTC-INR",
"lastModifiedDate" : 1526395676478,
"__ds" : {
"_v" : 1
},
"ds_key" : "jh7skpq6-1lcoebwn5j3"
},
{
"_id" : ObjectId("5afaf3158e7cd4d7e5675e6d"),
"trans_id" : 2910369,
"fill_qty" : 276777,
"fill_price" : 610600,
"fill_flags" : 2,
"currencyPair" : "BTC-INR",
"lastModifiedDate" : 1526395669729,
"__ds" : {
"_v" : 1
},
"ds_key" : "jh7skkip-1pomnhe1sv0"
},
{
"_id" : ObjectId("5afaf30f8e7cd4d7e5675dfe"),
"trans_id" : 2910366,
"fill_qty" : 180150,
"fill_price" : 610600,
"fill_flags" : 2,
"currencyPair" : "BTC-INR",
"lastModifiedDate" : 1526395663092,
"__ds" : {
"_v" : 1
},
"ds_key" : "jh7skfec-16my2i58gl3"
},
{
"_id" : ObjectId("5afa7ea48e7cd4d7e55f0a15"),
"trans_id" : 2907344,
"fill_qty" : 6895,
"fill_price" : 610600,
"fill_flags" : 2,
"currencyPair" : "BTC-INR",
"lastModifiedDate" : 1526365860103,
"__ds" : {
"_v" : 1
},
"ds_key" : "jh7atn9j-22lylcn1u72"
}
]
和下面是我的查询:
pairModel.aggregate([
{
'$match': {
'lastModifiedDate': {'$exists': true, '$ne': null, '$gt': lt24hrTS, '$lt': nowTS}
}
},
{
'$group': {
'_id': null,
'24hoursHigh': {'$max': '$fill_price'},
'24hoursLow': {'$min': '$fill_price'},
"volume": { "$sum": "$fill_qty"},
"lastTradedRate": { "$last": "$fill_price"},
"firstTradedRate": { "$first": "$fill_price"},
}
},
{ "$sort": { "lastModifiedDate": 1 } }
])
这给了我fill_price
,firstTradedRate
和给定lastModifiedDate
匹配条件下的音量的低点。现在我的问题是,我想从匹配条件中取出最小-最大计算值。也就是说,无论lastModifiedDate条件如何,它都应该给我fill_price
的最小值-最大值。
可以通过两个不同的查询轻松查询完整的数据,但是可以修改上面的聚合查询以满足单个查询中的所有条件吗?
答案 0 :(得分:1)
可能要经过两个不同的查询,但是如果您想在聚合管道中进行操作,则可以使用3.6版本的$facet
。
基本上,您正在构面阶段内运行多个聚合管道查询,然后将结果串联。
此外,发现了您的代码中的一些问题并进行了修复。
request.setHeader('Connection', 'keep-alive, close')
request.setHeader('Cache-Control', 'no-cache')
request.setHeader('Accept-Encoding', '*')