Моя модель документа выглядит так:
{
"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
), а lowestPriceAtAll
- самая низкая цена во всех документах с одинаковым model
.
.
Я приготовил два запроса.
Сначала нужно найти документы с наименьшей ценой:
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
).