【问题标题】:MongoDB group with project带有项目的 MongoDB 组
【发布时间】:2020-06-04 07:10:23
【问题描述】:

我正在尝试选择字段的最大值以及它发生的时间。

db.temperaterdata.aggregate([     
        {  
            $match: { 
                        $and: [  
                             { "organization_id": 37 },  
                             { 
                                "resulttime":{ 
                                              $gte:'2020-05-01 00:00',                                           
                                              $lte:'2020-05-29 23:59'   
                                            }  
                             } 
                            ]  
                    }  
        },
        { 
           "$group": {          
                        "_id": "$userid", 
                        maxTemperature: { $max: "$temperature"},         
                        minTemperature: { $min: "$temperature"}     
                    }
        },
        {
           "$project": {
                        "resulttime":1, 
                        maxTemperature:1,
                        minTemperature:1
                    }

        }        
]);

但是,最高/最低温度出现的时间没有显示出来。来的结果是这样的:

{ "_id" : 233, "maxTemperature" : 100.67, "minTemperature" : 98.56 }
{ "_id" : 256, "maxTemperature" : 100.67, "minTemperature" : 98.56 }
{ "_id" : 263, "maxTemperature" : 100.67, "minTemperature" : 98.56 }

任何帮助将不胜感激。

【问题讨论】:

  • 你能提供temperaterdata的例子吗
  • { "_id" : ObjectId("5eb9495ae1d57b7b90c0fb15"), "userid" : 158, "temperature" : "98.56", "resulttime" : "2020-05-11 18:17:21" ,“插入时间”:“2020 年 5 月 11 日 18:17:22”,“组织 ID”:1 }

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

您需要通过userId + temperature 订购并使用$first / $last 运算符获取最大/最小文档。

试试下面的查询:

db.temperaterdata.aggregate([
  {
    "$match": {
      "organization_id": 37,
      "resulttime": {
        "$gte": "2020-05-01 00:00",
        "$lte": "2020-05-29 23:59"
      }
    }
  },
  {
    "$sort": {
      "userid": 1,
      "temperature": 1
    }
  },
  {
    "$group": {
      "_id": "$userid",
      "maxTemperature": {
        "$last": "$$ROOT"
      },
      "minTemperature": {
        "$first": "$$ROOT"
      }
    }
  },
  {
    "$project": {
      "maxresulttime": "$maxTemperature.resulttime",
      "minresulttime": "$minTemperature.resulttime",
      "maxTemperature": "$maxTemperature.temperature",
      "minTemperature": "$minTemperature.temperature"
    }
  }
])

MongoPlayground

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2023-03-04
    • 2010-11-14
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多