У меня есть коллекция с данными, как показано ниже
{
"_id": ObjectId("5c630163b5284c5e6fb163d2"),
"createdDate": ISODate("2019-02-12T17:24:51.844Z"),
"year": 2004,
"vehicleMake": ObjectId("5bcc8fdefdc6ed2b6733b478"),
"vehicleModel": ObjectId("5bcc8fe0fdc6ed2b6733b88d")
}
Я пытаюсь получить агрегирование фасетов следующим образом:
Vehicle.model.aggregate([
{ $match: { year: 2015 } },
{ $facet: {
vehicleMake: [{ $group: { _id: '$vehicleMake', count: { $sum: 1 }}}, { $sort: { count: -1, _id: -1 }}],
vehicleModel: [{ $group: { _id: '$vehicleModel', count: { $sum: 1 }}}, { $sort: { count: -1, _id: -1 }}],
year: [{ $group: { _id: '$year', count: { $sum: 1 }}}, { $sort: { _id: -1, _id: -1 }}],
yearRange: [ { $bucketAuto: { groupBy: '$year', buckets: 5 } }],
}
}
])
И мой результат выглядит так:
[
{
"vehicleMake": [
{
"_id": "5bcc8fdefdc6ed2b6733b4d5",
"count": 1
},
{
"_id": "5bcc8fdefdc6ed2b6733b4cf",
"count": 1
},
{
"_id": "5bcc8fdefdc6ed2b6733b4c7",
"count": 1
}
],
"vehicleModel": [
{
"_id": "5bcc8fe1fdc6ed2b6733bb7a",
"count": 1
},
{
"_id": "5bcc8fe0fdc6ed2b6733b6ab",
"count": 1
},
{
"_id": "5bcc8fe0fdc6ed2b6733b65d",
"count": 1
}
],
"year": [
{
"_id": 2015,
"count": 3
}
],
"yearRange": [
{
"_id": {
"min": 2015,
"max": 2015
},
"count": 3
}
]
}
]
Посоветуйте мне, пожалуйста, как использовать populate () для получения данных из коллекций, на которые есть ссылки (vehicleMake и vehicleModel), чтобы получить свойства имени вместо ObjectId и получить похожий результат:
"vehicleMake": [
{
"_id": "Audi",
"count": 1
},
{
"_id": "BMW",
"count": 1
}
]
Или, может бытьесть лучшая альтернатива, чем populate ()?