L'étape $group a le prototype suivant :
{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }
Votre champ1 est Heures et accumulator1 est somme ,Par conséquent, votre agrégation devrait ressembler à ceci :
db.pms_teamleadtimesheets.aggregate(
// Pipeline
[
// Stage 1
{
$match: {
UserName:"Admin",
FacilityID:"59a53f0c6077b2a029c52b7f",
ProjectID:"5a042ba02af18ac8388bd3c0"
}
},
// Stage 2
{
$group: {
_id: { ProjectID: "$ProjectID",
Task: "$Text", Phase: "$phase",
Comments: "$Comments",
TaskType: "$TaskType",
Items: "$Items",
UserName: "$UserName",
IsBillable: "$IsBillable",
Date: "$StartDate"
},
Hours:{$sum:"$Hours" }
}
},
// Stage 3
{
$project: {
_id: 0,
ProjectID: "$_id.ProjectID",
Phase: "$_id.Phase",
Task: "$_id.Task",
Comments: "$_id.Comments",
TaskType: "$_id.TaskType",
Items: "$_id.Items",
UserName: "$_id.UserName",
IsBillable: "$_id.IsBillable",
Date: "$_id.Date",
Hours: {
$divide: [ "$Hours", 60 ]
}
}
},
]
);
Sortie pour avec les données de test données :
{
"ProjectID" : "5a042ba02af18ac8388bd3c0",
"Phase" : "Analysis",
"Task" : "Analysis",
"Comments" : "2",
"TaskType" : "DELIVERY",
"Items" : "CRI",
"UserName" : "Admin",
"IsBillable" : true,
"Date" : "29-05-2018",
"Hours" : 4.0
}
{
"ProjectID" : "5a042ba02af18ac8388bd3c0",
"Phase" : "Analysis",
"Task" : "Analysis",
"Comments" : "8",
"TaskType" : "DELIVERY",
"Items" : "Others",
"UserName" : "Admin",
"IsBillable" : true,
"Date" : "28-05-2018",
"Hours" : 4.0
}
{
"ProjectID" : "5a042ba02af18ac8388bd3c0",
"Phase" : "Analysis",
"Task" : "Analysis",
"Comments" : "4",
"TaskType" : "DELIVERY",
"Items" : "Others",
"UserName" : "Admin",
"IsBillable" : true,
"Date" : "28-05-2018",
"Hours" : 4.0
}
Lire plus ici