假设我在经销商处出售的汽车的文档中有一组对象:
{
id: 'randomId',
model: 'Jetta'
carId: 'randomId',
salesmanId: 'salesmenId3'
},
{
id: 'randomId',
model: 'Civic'
carId: 'randomId',
salesmanId: 'salesmenId2'
},
{
id: 'randomId',
model: 'Civic'
carId: 'randomId',
salesmanId: 'salesmenId2'
},
{
id: 'randomId',
model: 'S200'
carId: 'randomId',
salesmanId: 'salesmenId'
},
{
id: 'randomId',
model: 'Jetta'
carId: 'randomId',
salesmanId: 'salesmenId3'
},
{
id: 'randomId',
model: 'Civic'
carId: 'randomId',
salesmanId: 'salesmenId2'
},
...
我希望能够查询每个 salesmanId 的汽车总数以及每个 salesmanId 的唯一汽车型号总数。
例如,如果我匹配“salesmenId2”,我希望返回以下内容:
{
salesmanId: 'salesmenId2',
totalCars: 3,
totalUniqueCars: 1
}
这是我到目前为止所拥有的:
$match: {'salesmanId': 'salesmenId2' },
{
$group: {
_id: '$salesmanId',
uniqueCars: { $addToSet: '$model'},
totalCars: { $sum: 1 }
}
},
{
$unwind:"$uniqueCars"
},
{
$group: {
_id: "$_id",
totalUniqueCars: { $sum:1}
}
}
现在只返回唯一汽车的总数。知道我可能做错了什么吗?
最佳答案
您甚至不必使用 $unwind
,而是可以使用 $size
“uniqueCars”数组字段上的运算符,它实际上给出了数组的大小。
db.cars.aggregate([
{
$match: { "salesmanId": "salesmenId2" }
},
{
$group: {
_id: "$salesmanId",
uniqueCars: { $addToSet: "$model"},
totalCars: { $sum: 1 }
}
},
{
$project : {
_id : 1,
totalCars : 1,
uniqueCar : { $size : "$uniqueCars" }
}
}
])
关于javascript - MongoDB聚合通用求和和按唯一键求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272352/