javascript—如何在具有多个条件的mongodb集合中对所有文档的键值求和

piwo6bdm  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(396)

我试图使用用户id和服务状态来总结用户已完成的服务总量。我的收藏如下:

[
  {
    _id: '5543333',
    title: 'service 1',
    description: 'des 1',
    status: 'completed',
    amount: 3000,
    user_id: '1',
  },
  {
    _id: '5543563',
    title: 'service 2',
    description: 'des 2',
    status: 'in progress',
    amount: 5000,
    user_id: '1',
  },
  {
    _id: '5542933',
    title: 'service 3',
    description: 'des 3',
    status: 'completed',
    amount: 4000,
    user_id: '1',
  },
];

预期结果:[{总数:7000}]
我所尝试的:

db.services.aggregate([
        {
          $group: {
            _id: '',
            price: {
              $sum: {
                $cond: [
                  {
                    $and: [
                      { $eq: ['$status', 'completed'] },
                      { $eq: ['$user_id', user.id] },
                    ],
                  },
                  '$price',
                  0,
                ],
              },
            },
          },
        },
        {
          $project: {
            _id: 0,
            total: '$price',
          },
        },
      ]);

我得到的结果:[{total:0}]
我的观察:它只适用于一种情况,而不是多种情况。

dsekswqp

dsekswqp1#

您可以先按状态筛选,然后按用户id分组。
工作场地

db.collection.aggregate([
  {
    "$match": {
      $expr: {
        "$eq": [
          "$status",
          "completed"
        ]
      }
    }
  },
  {
    "$group": {
      "_id": "$user_id",
      "total": {
        "$sum": "$amount"
      }
    }
  }
])

相关问题