【发布时间】:2021-11-19 17:33:09
【问题描述】:
考虑一个像下面的数组,我试图按日期分组并对持续时间求和:
[
{
"allDates": [
{
"duration": 153,
"date": "2021-10"
},
{
"duration": 20,
"date": "2021-11"
},
{
"duration": 181,
"date": "2021-11"
},
{
"duration": 180,
"date": "2021-11"
}
]
}
]
我试图获得持续时间的总和,但按日期分组。 这是我迄今为止尝试过的:
db.collection.aggregate([
{
$addFields: {
durations: {
$arrayToObject: {
$map: {
input: "$allDates",
as: "allDate",
in: {
k: {
$toString: "$$allDate.date"
},
v: {
$sum: {
$map: {
input: "$allDates",
as: "kv",
in: {
$cond: {
if: {
$eq: [
{
$toString: "$allDate.date"
},
{
$toString: "$$kv.k"
}
]
},
then: "$$kv.duration",
else: 0
}
}
}
}
}
}
}
}
},
}
}
])
不幸的是我得到的结果是:
[
{
"allDates": [
{
"date": "2021-10",
"duration": 153
},
{
"date": "2021-11",
"duration": 20
},
{
"date": "2021-11",
"duration": 181
},
{
"date": "2021-11",
"duration": 180
}
],
"durations": {
"2021-10": 534,
"2021-11": 534
}
}
]
所以它是为每个键而不是分别为每个键添加它们,我在这里缺少什么?
基本上我希望得到:
...
"durations": {
"2021-10": 153,
"2021-11": 381
}
【问题讨论】:
-
您希望得到什么结果?
-
@WernfriedDomscheit
"durations": {"2021-10": 153, "2021-11": 381 }基本上。因此,要添加每个日期的持续时间,而不是全部。编辑了问题以反映这一点。
标签: arrays mongodb mongodb-query aggregate