在$ group中的$ min和$ max中使用多个变量

时间:2019-07-29 09:44:01

标签: mongodb

我试图编写一个查询,该查询包含进入$ min和$ max的多个变量,以查找每个变量的最小和最大变量。

我需要的查询是: 对于每个航空公司,找到造成最小延误的延误类别,并找到该类别中该航空公司延误最多的机场。

我尝试编写以下内容,但不起作用:

{
  $group: {
    _id: "carrier",
    "min": {
      $min: {
        "arr_del15",
        "carrier_ct",
        "weather_ct",
        "nas_ct",
        "security_ct",
        "late_airport_ct"
      }
    }
  }
])

请问我应该如何使用多个变量?

非常感谢。

This explains the data I'm working with

1 个答案:

答案 0 :(得分:0)

仅举一个例子,我们在mongo数据库中插入了以下数据:

db.data.insertMany([
    {carrier: "AAA", a: 1, b: 2, c: 3, d: 4},
    {carrier: "AAA", a: 2, b: 3, c: 4, d: 5},
    {carrier: "BBB", a: 3, b: 4, c: 5, d: 6},
    {carrier: "BBB", a: 1, b: 2, c: 3, d: 4},
    {carrier: "CCC", a: 2, b: 3, c: 4, d: 5},
    {carrier: "CCC", a: 3, b: 4, c: 5, d: 6}
]);

然后我们可以从一个项目开始编写一个简单的聚集查询,该项目将获取该文档的当前最小和最大值,然后将其与groupby链接起来以获取所有载体的最小和最大值:

db.data.aggregate([
   { $project: {
      "carrier": 1,
      min: { $min: [
               "$a",
               "$b",
               "$c",
               "$d"
            ]
      },
      max: { $max: [
               "$a",
               "$b",
               "$c",
               "$d"
            ]
         }
      }
   },
   { $group: {
      _id : "$carrier",
      min: { $min: "$min" },
      max: { $max: "$max" }
      }
   }
]);

这将输出我们预期的结果:

{ "_id" : "CCC", "min" : 2, "max" : 6 }
{ "_id" : "BBB", "min" : 1, "max" : 6 }
{ "_id" : "AAA", "min" : 1, "max" : 5 }