我有一个带有对象数组的文档,我需要执行以下操作:
- 获取成员数组的总分.在这个例子中,这两个文档总共有5500分.
- 接下来,获取每个文档的成员的总分(Josh为2000,Carl为3500),然后计算其占总点数的百分比.计算公式为:(会员积分/总积分)*2000或(2000 / 5500) * 100.
- 最后,返回字段_id、Leader、Members‘s Points和Percent字段.
它应该如下所示:
{
_id: '00001',
leader: "Josh",
memberpoints: 2000,
percentage: 36.3636
},
{
_id: '00002',
leader: "Carl",
memberpoints: 3500,
percentage: 63.6363
}
These are the documents:个
[{
"_id": { "$oid": "00001" },
"leader": "Josh",
"members": [
{
"name": "Person A",
"points": 500
},
{
"name": "Person B",
"points": 500
},
{
"name": "Person C",
"points": 1000
}]
},
{
"_id": { "$oid": "00002" },
"leader": "Carl",
"members": [
{
"name": "Person D",
"points": 1000
},
{
"name": "Person E",
"points": 1000
},
{
"name": "Person F",
"points": 1500
}]
}]
但是,我得到了错误的百分比,因为它似乎只从Members数组中获得了一个对象.它可能与我的聚合管道中的$set部分有关,特别是[{ $divide: ["$members.points", "$total"] }, 100],但我不确定.
Wrong percentage, should be 36.3636个
{
_id: '00001',
leader: "Josh",
memberpoints: 2000,
percentage: 18.1818
}
Here is my MongoDB aggregation pipeline:个
db.users.aggregate([
{$unwind: "$members"},
{$setWindowFields: { output: { total: { $sum: "$members.points" }}}},
{$set: { percentage: { $multiply: [{ $divide: ["$members.points", "$total"] }, 100] }}},
{$group: { _id: "$_id", leader: {$first: "$leader"}, memberpoints: {$sum: "$members.points"}, percentage: {$first: "$percentage"}}}])