我试图在我的MongoDB后端中运行一些聚合,在此我计算一个值,然后将该计算的值添加到另一个值。第一步正在工作,但是第二步产生的值为null
,我正在尝试了解原因以及如何解决此问题。
这是我的聚合结果:
db.staff.aggregate({
$project: {
_id: 1,
"workloadSatisfactionScore": {
$cond: [ { $eq: [ "$workload.shiftAvg", 0 ] }, "N/A", { $divide: [ "$workload.shiftAvg", "$workload.weeklyShiftRequest.minimum" ] } ]
}
},
$project: {
_id: 1,
totalScore: {
$sum: [ "$workloadSatisfactionScore", 10 ]
},
}
})
即使第一个$project
阶段生成的数字结果为'workloadSatisfactionScore'或为null
的文档,但在第二个$project
阶段之后,所有文档的值均为{{1} }代表“ totalScore”。
我应该得到的是'workloadSatisfactionScore'的值加上10的值。但是正如我说的,我得到的是所有文档的null
。这里看起来有什么不对?
例如,我集合中的一个特定文档为“ workloadSatisfactionScore”返回值null
。因此,当将其插入第二个0.9166666666666666
阶段时,我期望'totalScore'的值为$project
。但是,正如我所说,我得到的是该文档和所有其他文档的10.9166666666666666
。
答案 0 :(得分:1)
到第二个$project
管道时,workloadSatisfactionScore
可能是一个字符串,即值为"N/A"
,当$add
或$sum
与非数字值一起使用。
不需要第二个项目管道,您可以将值添加到处理非数字部分的其他条件中,而无需将其传递给管道:
db.staff.aggregate({
"$project": {
"_id": 1,
"totalScore": {
"$cond": [
{ "$eq": [ "$workload.shiftAvg", 0 ] },
"N/A",
{ "$add": [
10,
{ "$divide": [
"$workload.shiftAvg",
"$workload.weeklyShiftRequest.minimum"
] }
] }
]
}
}
})