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" }
                  }
    }
 ])