Получить ключ максимального значения из безымянного вложенного массива объектов в агрегате Mon go DB - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть документ, который выглядит следующим образом.

{
  city: "Manhattan",
  State: "NY",
  eth:[
    {02: 40},
    {15:50},
    {04:10}
  ]

}

Я хочу найти объект в массиве eth с максимальным значением. Я пытался сделать это.

project:{
  {'eth':{$reduce:{
                        input:"$eth",
                        initialValue:1,
                        in:{$max:["$$value","$$this"]}
                    }}}
            ,{
            $project:{"eth":{$objectToArray:"$eth"}},
        }
}

, что приводит к [{k: 15, v: 60}].

Как мне получить значение k в качестве моего eth. Я попытался сделать другой проект, в котором я пытался получить "$ eth [0] .k", но это привело к неопределенности.

Я хочу, чтобы вывод выглядел так:

{
  city: "Manhattan",
  state:"NY",
  eth: 15
}

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете просто использовать $max, чтобы получить максимальное значение

db.collection.aggregate([
  { "$project": {
    "max": {
      "$objectToArray": {
        "$max": "$eth"
      }
    }
  }},
  { "$project": {
    "eth": {
      "$arrayElemAt": ["$max.k", 0]
    }
  }}
])
...