我的文档看起来像这样:
{
"_id": "2023-04-08",
"dailyNotes": [
{
"therapyDiscipline": "PT",
"individual": [
60,
45,
30,
75,
55
],
"concurrent": [
69
],
"coTreat": [
67
]
}
]
}
我想对individual
数组中的所有数字求和,并创建一个新文档,其中只有individual
键具有数组的总和。
以下是我到目前为止尝试过的方法,但没有成功
{
$group:
{
_id: '$_id',
individual:{
$sum: '$dailyNotes.individual'
}
}
}
这将返回:
{
"_id": "2023-04-08",
"individual": 0
}
我不明白为什么返回0
,而应该返回265
。
我尝试了一些其他的解决方案,但它们也导致了0
的总和:
{
$project: {
individual: {
$reduce: {
input: "$dailyNotes.individual",
initialValue: 0,
in: { $sum: [ "$$value", "$$this" ]}
}
}
}
}
{
$project:
{
individual: {
$sum: '$dailyNotes.individual'
}
}
}
有人能解释一下为什么它返回0而不是265,以及如何解决这个问题吗?
**[更新]:(多条记录(最多3条)的示例)**对于以下文档:
{
"_id":"2023-04-08",
"dailyNotes":[
{
"therapyDiscipline":"PT",
"individual":[
60,
45,
30,
75,
55
]
},
{
"therapyDiscipline":"YT",
"individual":[
2,
4
]
}
]
}
这应返回为:
{
"_id":"2023-04-08",
"dailyNotes":[
{
"individual":265
},
{
"individual":6
}
]
}
2条答案
按热度按时间ylamdve61#
最简单的方法是将
$map
与$sum
一起使用playground
使用
$reduce
的替代方案playground
y0u0uwnf2#
当前聚合管道返回0而不是期望的总和265的原因是$sum运算符期望一个值数组作为其输入。但是,在$sum运算符表达式中,将整个dailyNotes.individual数组作为单个值传递。因此,它不能对数组的值求和。
要解决这个问题,需要将$sum运算符与$reduce运算符结合使用,对单个数组求和。以下是如何修改聚合管道以实现此目的: