gpt4 book ai didi

mongodb - 有什么办法可以在同一个 $project 中使用 $filter 和 $sum 吗?

转载 作者:可可西里 更新时间:2023-11-01 09:26:01 26 4
gpt4 key购买 nike

假设我的聚合管道中有一个如下所示的文档:

{
scores: [
{type: 'quiz', score: 75},
{type: 'quiz', score: 62},
{type: 'final', score: 34},
]
}

我正在使用 $project 对其进行转换,我想获得测验分数的总和,有没有办法以某种方式链接我的 $filter$sum

我知道我可能会使用两个 $project,但是我目前设置管道的方式会迫使我继续在我的第二个项目中重新投影大量 key ,我我想避免。

最佳答案

您需要另一个运算符的帮助,将分数嵌入文档映射到一个值数组中,您可以 $sum 。您可以使用 $map 来做到这一点 运算符如下:

db.test.aggregate([ 
{
"$project": {
"scores": 1,
"quiz_total": {
"$sum": {
"$map": {
"input": "$scores",
"as": "item",
"in": {
"$cond": [
{ "$eq": [ "$$item.type", "quiz" ] },
"$$item.score",
0
]
}
}
}
}
}
}
])

示例输出

{
"_id" : ObjectId("582ac9619602e37d2794acd3"),
"scores" : [
{
"type" : "quiz",
"score" : 75
},
{
"type" : "quiz",
"score" : 62
},
{
"type" : "final",
"score" : 34
}
],
"quiz_total" : 137
}

关于mongodb - 有什么办法可以在同一个 $project 中使用 $filter 和 $sum 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601495/

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