Получить последние и минимальные значения из сгруппированных документов

Моя модель документа выглядит так:

{
    "model": "ABC123",
    "date": "2018-12-24T23:00:00.000+0000",
    "price": "2000" ,
}

Я хотел бы получить коллекцию, чтобы получить массив документов:

[
  { "_id" : "ABC123", "newestDate" : ISODate("2018-12-26T23:00:00Z"), "newestPrice" : 2801.33, "lowestPriceAtAll": 1300 }, 
{ "_id" : "ABC124", "newestDate" : ISODate("2018-12-26T23:00:00Z"), "newestPrice" : 2801.33, "lowestPriceAtAll": 990}
]

где _id - поле model , newestPrice - цена самого нового документа (сгруппированного по model ) и lowerPriceAtAll - это самая низкая цена во всех документах с одинаковой моделью .

Я на гриле два запроса. Во-первых, это найти самые дешевые документы:

   offers.aggregate([ 
        { $sort: { "model": 1, "price": 1 }}, 
        { 
            $group: { 
                _id: "$model", 
                lowestPrice: { "$first": "$price" },
                lowestPriceDate: { "$first": "$date"},
            }
        }
    ])

второе - найти новейшие документы:

offers.aggregate([ 
        { $sort: { "model": 1, "date": -1 }}, 
        { 
            $group: { 
                _id: "$model", 
                newestDate: { "$first": "$date" },
                newestPrice: { "$first": "$price"},
            }
        }
    ])

Можно ли объединить эти два запроса в один? (самое главное, документы должны быть сгруппированы по полю model ).

0
de
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MongoDB Russian
MongoDB Russian
1 086 участник(ов)

> db.stats() https://combot.org/chat/-1001035023078