Javascript MongoDB聚合一般求和和和与唯一键的求和
假设我有一个从经销商处出售的汽车文档中的对象集合:Javascript MongoDB聚合一般求和和和与唯一键的求和,javascript,mongodb,mongodb-query,aggregation-framework,Javascript,Mongodb,Mongodb Query,Aggregation Framework,假设我有一个从经销商处出售的汽车文档中的对象集合: { id: 'randomId', model: 'Jetta' carId: 'randomId', salesmanId: 'salesmenId3' }, { id: 'randomId', model: 'Civic' carId: 'randomId', salesmanId: 'salesmenId2' }, { id: 'randomId', model: 'Civic' carId: 'randomId',
{
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
,相反,你可以在“uniqueCars”数组字段上使用操作符,它实际上给出了数组的大小
db.cars.aggregate([
{
$match: { "salesmanId": "salesmenId2" }
},
{
$group: {
_id: "$salesmanId",
uniqueCars: { $addToSet: "$model"},
totalCars: { $sum: 1 }
}
},
{
$project : {
_id : 1,
totalCars : 1,
uniqueCar : { $size : "$uniqueCars" }
}
}
])
您甚至不必使用
$unwind
,相反,您可以在“uniqueCars”数组字段上使用运算符,这实际上为您提供了数组的大小
db.cars.aggregate([
{
$match: { "salesmanId": "salesmenId2" }
},
{
$group: {
_id: "$salesmanId",
uniqueCars: { $addToSet: "$model"},
totalCars: { $sum: 1 }
}
},
{
$project : {
_id : 1,
totalCars : 1,
uniqueCar : { $size : "$uniqueCars" }
}
}
])
您甚至不必使用
$unwind
,相反,您可以在“uniqueCars”数组字段上使用运算符,这实际上为您提供了数组的大小
db.cars.aggregate([
{
$match: { "salesmanId": "salesmenId2" }
},
{
$group: {
_id: "$salesmanId",
uniqueCars: { $addToSet: "$model"},
totalCars: { $sum: 1 }
}
},
{
$project : {
_id : 1,
totalCars : 1,
uniqueCar : { $size : "$uniqueCars" }
}
}
])
您甚至不必使用
$unwind
,相反,您可以在“uniqueCars”数组字段上使用运算符,这实际上为您提供了数组的大小
db.cars.aggregate([
{
$match: { "salesmanId": "salesmenId2" }
},
{
$group: {
_id: "$salesmanId",
uniqueCars: { $addToSet: "$model"},
totalCars: { $sum: 1 }
}
},
{
$project : {
_id : 1,
totalCars : 1,
uniqueCar : { $size : "$uniqueCars" }
}
}
])