mongodb管道聚合组结果到数组中



我有一个项目集合:

{
_id: 1,
title: "Project 1"
},
{
_id: 2,
title: "Project 2"
}

和一个(时间(条目集合:

{
_id: 90123,
project_id: 1,
task_id: 1,
hours: 3
},
{
_id: 90124,
project_id: 1,
task_id: 1,
hours: 5
},
{
_id: 90125,
project_id: 2,
task_id: 2,
hours: 1
},
{
_id: 90126,
project_id: 1,
task_id: 2,
hours: 2
}

我想使用管道聚合来:

  • 获取项目1的条目
  • 将项目1的所有条目合计为"totalSpend">
  • 按task_id分组,每个任务的总小时数

最终结果是这样的:

{
totalSpent: 10,
spentByTask: {
{ task_id: 1, spent: 8 },
{ task_id: 2, spent: 2 }
}
}

试试这个管道:

db.entries.aggregate(
[
{
$match: { project_id: 1 }
},
{
$group: {
_id: '$task_id',
spent: { $sum: '$hours' }
}
},
{
$group: {
_id: null,
totalSpent: { $sum: '$spent' },
spentByTask: { $push: { task_id: '$_id', spent: '$spent' }
}
}
},
{
$project: { _id: 0 }
}
])

如果你需要不同的结果,请告诉我,我会相应地更新我的答案。

最新更新