【问题标题】:MongoDB aggregate nested filed max valueMongoDB聚合嵌套字段最大值
【发布时间】:2021-08-14 07:29:32
【问题描述】:

我有这个收藏:

{ "_id" : { "carrier_nam" : "Alaska Airlines Inc.", "airport_nam" : "Kodiak, AK: Kodiak Airport" }, "value" : { "security2" : 3 } }
{ "_id" : { "carrier_nam" : "Alaska Airlines Inc.", "airport_nam" : "Santa Ana, CA: John Wayne Airport-Orange County" }, "value" : { "security2" : 29 } }
{ "_id" : { "carrier_nam" : "JetBlue Airways", "airport_nam" : "Baltimore, MD: Baltimore/Washington International Thurgood Marshall" }, "value" : { "security2" : 2 } }
{ "_id" : { "carrier_nam" : "ATA Airlines d/b/a ATA", "airport_nam" : "Denver, CO: Denver International" }, "value" : { "security2" : 5 } }

我需要获取security2 延迟的最大值并获取与carrier_nam 的最大值相关联的“airport_nam”值。

这个聚合结果让我得到了正确的答案,但不幸的是,我也无法打印 security2 发生必须在其中的“airport_nam”文件。

这是在没有“airport_nam”的情况下让我得到正确答案的聚合。

db.tmp2.aggregate([{ $group: { "_id": "$_id.carrier_nam", value: { $max: "$value" } } }
   , { $out : "tmp22"  }
]) 

这是结果(没有与我需要添加的嵌套 obj 键关联的“airport_nam”):

{ "_id" : "Northwest Airlines Inc.", "value" : { "security2" : 78 } }
{ "_id" : "Independence Air", "value" : { "security2" : 15 } }
{ "_id" : "AirTran Airways Corporation", "value" : { "security2" : 0 } }

为了更好地理解最终答案应该是这样的:

{ "_id" : "Northwest Airlines Inc.", "value" : { "security2" : 78 },"airport_nam" : "Kinston }
{ "_id" : "Independence Air", "value" : { "security2" : 15 } }
{ "_id" : "AirTran Airways Corporation", "value" : { "security2" : 0 },"airport_nam" : "Denver}

如何在不使用组的情况下将“airport_nam”添加到聚合最终答案中?

当前的结构让我得到了正确的答案,我只需要在她身边打印“airport_nam”嵌套字段。

感谢帮助者!

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以将$max 与参数文档一起使用,而不仅仅是单个值。 只需将您要比较的值作为第一个字段,只有当第一个字段相等时才会在第二个字段上进行比较

    See how mongodb compares things

    db.collection.aggregate([
      {
        "$group": {
          "_id": "$_id.carrier_nam",
          "value": {
            "$max": {
              "security2": "$value.security2",
              "airport_nam": "$_id.airport_nam"
            }
          }
        }
      },
      {
        "$project": {
          "_id": 0,
          "airport_nam": "$value.airport_nam",
          "carrier_nam": "$_id",
          "value": {
            "security2": "$value.security2"
          }
        }
      }
    ])
    

    Run code here

    如果某些事情不起作用,您是否可以提供更多数据,以及您希望它们变成什么样子。

    【讨论】:

      猜你喜欢
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2021-03-13
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多