Tính tổng PlayerScore cho mỗi PlayerName across các document, khi điểm lưu trong mảng Details.
Tạo collection demo131:
> db.demo131.insertOne({
"_id": 101,
"Details": [
{"PlayerScore":500,"PlayerName":"Chris"},
{"PlayerScore":400,"PlayerName":"David"}
]
});
> db.demo131.insertOne({
"_id": 102,
"Details": [
{"PlayerScore":600,"PlayerName":"Chris"},
{"PlayerScore":200,"PlayerName":"David"}
]
});
Pipeline: unwind Details, group theo PlayerName tính sum, group lại push vào mảng Details:
> db.demo131.aggregate([
{ $unwind: "$Details" },
{
$group: {
_id: "$Details.PlayerName",
Value: { $sum: "$Details.PlayerScore" }
}
},
{
$group: {
_id: 0,
Details: { $push: { Details: "$_id", Value: "$Value" } }
}
},
{ $project: { Details: 1, _id: 0 } }
])
Kết quả: Chris = 1100, David = 600:
{
"Details" : [
{ "Details" : "David", "Value" : 600 },
{ "Details" : "Chris", "Value" : 1100 }
]
}