作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我的聚合管道中有一个如下所示的文档:
{
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/
我是一名优秀的程序员,十分优秀!