how attribute does mongodb uses to group by ? do they use only the "_id" or the ( "_id" AND "Total departments") I am slightly confused because "_id" and "Total Departments" are in the same curly bracket $group
db.department.aggregate([
{
$group: {
"_id": {
"totalNumOfStaff": "$totalNumOfStaff",
"budget": "$budget"
},
"Total departments": {
$sum: "$budget"
}
}
}
]).pretty()
CodePudding user response:
In your provided code sample, you are grouping by a composite key {totalNumOfStaff, budget}, which comes from 2 sources: totalNumOfStaff and budget respectively. They are combined as the group key _id.
For Total departments, it is actually the aggregation depending on the group key _id or {totalNumOfStaff, budget}. You are doing $sum by every unique combination of the group key {totalNumOfStaff, budget}.
CodePudding user response:
MongoDB can compare objects also
Each document that is about to be grouped will get a grouping key, that
its that document {"totalNumOfStaff": "$totalNumOfStaff","budget": "$budget"}
Based on the comparison algorithm (comparing the field names and values in order, see the link), it will decide to which group it belongs or create a new group for it.
In the above example same group is if same totalNumOfStaff AND same budget(order matters) and for each group sums the budget.
