Mongodb Mongo查询最小最大不包括匹配条件

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, "

我有以下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 } }
        ])
对于给定的
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