gpt4 book ai didi

mongodb - 获取聚合中嵌套数组的总和

转载 作者:行者123 更新时间:2023-12-02 20:23:19 24 4
gpt4 key购买 nike

好的,我有一个似乎无法解决的问题。

我有一个这样的文档:

{
"playerId": "43345jhiuy3498jh4358yu345j",
"leaderboardId": "5b165ca15399c020e3f17a75",
"data": {
"type": "EclecticData",
"holeScores": [
{
"type": "RoundHoleData",
"xtraStrokes": 0,
"strokes": 3,
},
{
"type": "RoundHoleData",
"xtraStrokes": 1,
"strokes": 5,
},
{
"type": "RoundHoleData",
"xtraStrokes": 0,
"strokes": 4
}
]
}
}

现在,我想要完成的是使用笔划的总和,然后进行排序。我正在尝试这个:

var sortedBoard = db.collection.aggregate(
{$match: {"leaderboardId": boardId}},
{$group: {
_id: "$playerId",
played: { $sum: 1 },
strokes: {$sum: '$data.holeScores.strokes'}
}
},
{$project:{
type: "$SortBoard",
avgPoints: '$played',
sumPoints: "$strokes",
played : '$played'
}}
);

这里的问题是我确实得到了正确的笔画总和,因为它位于另一个数组中。

希望有人可以帮助我,并提前致谢:-)

最佳答案

你需要说$sum 两次:

var sortedBoard = db.collection.aggregate([
{ "$match": { "leaderboardId": boardId}},
{ "$group": {
"_id": "$playerId",
"SortBoard": { "$first": "$SortBoard" },
"played": { "$sum": 1 },
"strokes": { "$sum": { "$sum": "$data.holeScores.strokes"} }
}},
{ "$project": {
"type": "$SortBoard",
"avgPoints": "$playeyed",
"sumPoints": "$strokes",
"played": "$played"
}}
])

原因是因为您将它两者用作“对数组值求和”的方式,并且还用作 $group 的“累加器” .

您似乎缺少的另一件事是 $group只输出您告诉它的字段,因此如果您想访问其他阶段或输出中的其他字段,您需要将它们保留为 $first 之类的内容或另一个累加器。无论如何,我们似乎还缺少问题中的管道阶段,但为了确定这一点值得注意。

另请注意,您确实应该将聚合管道包装为官方数组 [],因为旧用法已被弃用,并且可能会在某些语言实现中导致问题。

返回正确的类(class)详细信息:

{
"_id" : "43345jhiuy3498jh4358yu345j",
"avgPoints" : 1,
"sumPoints" : 12,
"played" : 1
}

关于mongodb - 获取聚合中嵌套数组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50714955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com