Mongodb Mongo查询最小最大不包括匹配条件
我有以下pairModel集合架构:Mongodb Mongo查询最小最大不包括匹配条件,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下pairModel集合架构: [{ "_id" : ObjectId("5afaf31c8e7cd4d7e5675f17"), "trans_id" : 2910372, "fill_qty" : 3275466, "fill_price" : 610600, "fill_flags" : 2, "currencyPair" : "BTC-INR", "lastModifiedDate" : 1526395676478, "
[{
"_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 } }
])
对于给定的lastModifiedDate
匹配条件,fill\u price
,firstTradedRate
和音量,这给了我低-高的价格。现在我的问题是,我想把最小最大计算从匹配条件中去掉。i、 e无论最后修改的日期条件如何,它都应该为填充价格
提供最小最大值
使用两个不同的查询可以轻松地查询完整数据,但是否可以修改上述聚合查询以在单个查询中满足所有条件?两个不同的查询可能是可行的方法,但如果您喜欢在聚合管道中执行此操作,则可以在3.6版本中使用 基本上,您在facet阶段中运行多个聚合管道查询,然后连接结果 另外,发现了代码中的一些问题并修复了它
pairModel.aggregate([{
"$facet":{
"lastfirst":[
{"$match":{"lastModifiedDate":{"$exists":true,"$ne":null,'$gt':lt24hrTS,'$lt': nowTS}}},
{"$sort":{"lastModifiedDate":1}},
{"$group":{
"_id":null,
"volume":{"$sum":"$fill_qty"},
"lastTradedRate":{"$last":"$fill_price"},
"firstTradedRate":{"$first":"$fill_price"}
}}
],
"maxmin":[
{"$group":{
"_id":null,
"AllTimeHigh":{"$max":"$fill_price"},
"AllTimeLow":{"$min":"$fill_price"}}
}
]
}
},
{"$unwind":"$lastfirst"},
{"$replaceRoot":{"newRoot":{"$mergeObjects":["$lastfirst", {"$arrayElemAt":["$maxmin", 0]}]}}
}])
非常感谢您的回答,我尝试了上面的代码,但它给了我以下错误-
MongoError:无法识别的表达式“$mergeObjects”
。我使用的是v3.4.16Yw。您需要3.6版本才能使用mergeObjects。将$mergeObjects
替换为{“$arrayToObject”:{“$concatarray”:[{“$objectToArray”:“$lastfirst”},{“$objectToArray”:{“$arrayElemAt”:[“$maxmin”,0]}]}}
用于3.4版本。从您的回答中学到了一个新东西-$facet