【发布时间】:2019-07-31 07:53:32
【问题描述】:
我有一个包含如下数据的集合
{
"_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() 更好的选择?
【问题讨论】:
标签: mongodb mongoose aggregate facet populate