如何在mongodb中使用$project显示数组中的特定字段

如何在mongodb中使用$project显示数组中的特定字段,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个包含航班信息的数据库。我试图找到延迟时间最少的类别。我设法找到并显示了类别的最小分钟数,但没有显示类别本身 我试着在每个字段后面加上“:true”来显示它 db.delayData.aggregate([{ $group: { "_id": "$carrier", "arr_sum": { $sum: "$arr_delay"

我有一个包含航班信息的数据库。我试图找到延迟时间最少的类别。我设法找到并显示了类别的最小分钟数,但没有显示类别本身

我试着在每个字段后面加上“:true”来显示它

db.delayData.aggregate([{
                $group: {
                    "_id": "$carrier",
                    "arr_sum": {
                        $sum: "$arr_delay"
                    },
                    "carrier_sum": {
                        $sum: "$carrier_delay"
                    },
                    "weather_sum": {
                        $sum: "$weather_delay"
                    },
                    "nas_sum": {
                        $sum: "$nas_delay"
                    },
                    "sec_sum": {
                        $sum: "$security_delay"
                    },
                    "late_air_sum": {
                        $sum: "$late_aircraft_delay"
                    }
                }
            },
            {
                $project {
                    "min_delay_category": {
                        $min["$arr_sum", "$carrier_sum", "$weather_sum", "$nas_sum", "$sec_sum", "$late_air_sum"]
                    }
                }
            ]).pretty()
我想要这样的东西: {id:“VX”,“最小延迟”类别:1449,“秒和”…}

我试着写:

     ..."$sec_sum":1,"$late_air_sum":1]
但错误信息是:

     "missing ] after element list"
当我写道:

      ...{"sec_sum":1},{"late_air_sum":1}] 
我没有错误消息,但它会给我至少第二个结果,而不是第一个。 例如:

      { "_id" : "VX", "min_delay_category" : 69081 }

但是“VX”的真实结果是1449,下面的查询可以得到预期的输出:

db.collection.aggregate([
    {
        $project:{
            "carrier":1,
            "category.arr_delay":"$arr_delay",
            "category.carrier_delay":"$carrier_delay",
            "category.weather_delay":"$weather_delay",
            "category.nas_delay":"$nas_delay",
            "category.security_delay":"$security_delay",
            "category.late_aircraft_delay":"$late_aircraft_delay"
        }
    },
    {
        $project:{
            "carrier":1,
            "categories":{
                $objectToArray:"$category"
            }
        }
    },
    {
        $unwind:"$categories"
    },
    {
        $group:{
            "_id":{
                "carrier":"$carrier",
                "category":"$categories.k"
            },
            "carrier":{
                $first:"$carrier"
            },
            "category":{
                $first:"$categories.k"
            },
            "total_delay":{
                $sum:"$categories.v"
            }
        }
    },
    {
        $sort:{
            "total_delay":1
        }
    },
    {
        $group:{
            "_id": "$carrier",
            "carrier":{
                $first:"$carrier"
            },
            "category":{
                $first:"$category"
            },
            "minimum_delay":{
                $first:"$total_delay"
            }
        }
    },
    {
        $project:{
            "_id":0
        }
    }
]).pretty();
数据集:

{
    "_id" : ObjectId("5d5b5058435c7584459b7bae"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 25,
    "late_aircraft_delay" : 698,
    "" : ""
},
{
    "_id" : ObjectId("5d5b5058435c7584459b7bbe"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 2512,
    "late_aircraft_delay" : 698,
    "" : ""
}
{ "carrier" : "AA", "category" : "carrier_delay", "minimum_delay" : 1020 }
输出:

{
    "_id" : ObjectId("5d5b5058435c7584459b7bae"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 25,
    "late_aircraft_delay" : 698,
    "" : ""
},
{
    "_id" : ObjectId("5d5b5058435c7584459b7bbe"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 2512,
    "late_aircraft_delay" : 698,
    "" : ""
}
{ "carrier" : "AA", "category" : "carrier_delay", "minimum_delay" : 1020 }
聚合阶段详细信息:

{
    "_id" : ObjectId("5d5b5058435c7584459b7bae"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 25,
    "late_aircraft_delay" : 698,
    "" : ""
},
{
    "_id" : ObjectId("5d5b5058435c7584459b7bbe"),
    "year" : 2003,
    "month" : 6,
    "carrier" : "AA",
    "carrier_name" : "American Airlines Inc.",
    "airport" : "ABQ",
    "airport_name" : "Albuquerque, NM: Albuquerque International Sunport",
    "arr_flights" : 307,
    "arr_del15" : 56,
    "carrier_ct" : 14.68,
    "weather_ct" : 10.79,
    "nas_ct" : 19.09,
    "security_ct" : 1.48,
    "late_aircraft_ct" : 9.96,
    "arr_cancelled" : 1,
    "arr_diverted" : 1,
    "arr_delay" : 2530,
    "carrier_delay" : 510,
    "weather_delay" : 621,
    "nas_delay" : 676,
    "security_delay" : 2512,
    "late_aircraft_delay" : 698,
    "" : ""
}
{ "carrier" : "AA", "category" : "carrier_delay", "minimum_delay" : 1020 }
  • 第一阶段:将所有延迟作为
    类别的一部分进行预测
  • 第二阶段:
    类别
    转换为键值对数组 其中,“k”是延迟类型,“v”是延迟类型
  • 第三阶段:展开准备好的阵列
  • 第四阶段:根据
    承运人和
    延迟类型(k)
    进行分组,并对每种类型的延迟进行汇总
  • 第五阶段:按升序对计算的总延迟进行排序
  • 第六阶段:
    载体上分组并获取第一份文档
    哪个保持最小的延迟

欢迎来到StackOverflow。预期的产出不清楚。请您发布示例数据和适当的预期输出。延迟的类别有:承运人延迟-承运人造成的总延迟分钟数。天气延误-由于天气原因造成的延误总分钟数,还有4分钟:飞机抵达延误、nas延误、安全延误、飞机延误。id表示航空公司代码(承运人)。对于每一家航空公司,我都有很多航班。我需要计算每个类别的延误总数,以确定每个航空公司哪一类别的延误时间最少。预期的输出是:{“\u id”:“VX”,类别:security\u delay,“min\u delay\u category”:1449}或:{“\u id”:“VX”,“min\u delay\u category”:security\u delay}。好的。如果你能发布一份样本文档,这将有助于准备一个完美的查询。{“_id”:ObjectId(“5d5b5058435c7584459b7bae”),“年”:2003,“月”:6,“承运人”:“AA”,“承运人名称”:“美国航空公司”,“机场”:“ABQ”,“机场名称”:“阿尔伯克基,新墨西哥州:阿尔伯克基国际太阳港”,“arr_航班”:307,“arr_del15”:56,“航母起飞时间”:14.68,“天气起飞时间”:10.79,“航母起飞时间”:19.09,“安全起飞时间”:1.48,“飞机晚点起飞时间”:9.96,“飞机晚点起飞取消”:1,“飞机晚点起飞时间”:1,“飞机晚点起飞时间”:2530,“航母晚点起飞时间”:510,“天气晚点起飞时间”:621,“飞机晚点起飞时间”:676,“安全晚点起飞时间”:25,“飞机晚点起飞时间”:698“:”)