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

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

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

  1. [
  2. {
  3. _id: '5543333',
  4. title: 'service 1',
  5. description: 'des 1',
  6. status: 'completed',
  7. amount: 3000,
  8. user_id: '1',
  9. },
  10. {
  11. _id: '5543563',
  12. title: 'service 2',
  13. description: 'des 2',
  14. status: 'in progress',
  15. amount: 5000,
  16. user_id: '1',
  17. },
  18. {
  19. _id: '5542933',
  20. title: 'service 3',
  21. description: 'des 3',
  22. status: 'completed',
  23. amount: 4000,
  24. user_id: '1',
  25. },
  26. ];

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

  1. db.services.aggregate([
  2. {
  3. $group: {
  4. _id: '',
  5. price: {
  6. $sum: {
  7. $cond: [
  8. {
  9. $and: [
  10. { $eq: ['$status', 'completed'] },
  11. { $eq: ['$user_id', user.id] },
  12. ],
  13. },
  14. '$price',
  15. 0,
  16. ],
  17. },
  18. },
  19. },
  20. },
  21. {
  22. $project: {
  23. _id: 0,
  24. total: '$price',
  25. },
  26. },
  27. ]);

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

dsekswqp

dsekswqp1#

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

  1. db.collection.aggregate([
  2. {
  3. "$match": {
  4. $expr: {
  5. "$eq": [
  6. "$status",
  7. "completed"
  8. ]
  9. }
  10. }
  11. },
  12. {
  13. "$group": {
  14. "_id": "$user_id",
  15. "total": {
  16. "$sum": "$amount"
  17. }
  18. }
  19. }
  20. ])
展开查看全部

相关问题