javascript - MongoDB聚合通用求和和按唯一键求和

标签 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',
 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/

相关文章:

mongodb - 如何在同一文档中连接数组?

javascript - Node.JS bootstrap 404 尝试获取 dist/js/login

javascript - 基于 PHP-Array 动态追加表单

javascript - 使用 WSH 脚本获取临时文件夹

c++ - 文档{}的mongodb C++驱动程序编译错误

node.js - 我想更新用户个人资料

javascript - 仅使用几个关键字在 mongodb 中搜索

javascript - 使用 mongodb 聚合查询获取子文档中 sibling 的数量

mongodb - 如何在mongodb中将字符串转换为数值

javascript - Rxjs v6.x 上的类型 'clientX' .ts(2339) 上不存在属性 'Event'