我有一个聚合查询,如下所示:
...
{
'$unwind': {
path: '$modifier'
}
}, {
'$group': {
'_id': {
'date': {
'$dateToString': {
'format': '%d/%m/%Y',
'date': '$updatedTime'
}
}
},
'$$modifier': { '$sum': 1 }
}
},
...
我想把上一阶段的结果modifier
值($unwind
)作为下一阶段的字段($group
),具体如下图所示,我该如何实现?
MongoDB aggregation question detailed picture
- -当前--
这是$unwind
级的输出:
x一个一个一个一个x一个一个二个x
这是$group
级的输出:
_id: { date:"27/03/2020" }
modifier:1
- -预期--
$unwind
级的输出:
updatedTime:2020-03-27T11:02:43.608+00:00
modifier:"james@email.com"
updatedTime:2020-03-27T11:02:43.608+00:00
modifier:"eric@email.com"
这是$group
级的输出:
_id: { date:"27/03/2022" }
james@email.com:1
eric@email.com:1
total:2
Notice that "james@email.com" and "eric@email.com" come from $unwind
stage which is before $group
stage. total
is the total of modifier (examples: 'james@email.com' and 'eric@email.com') values. Any suggestion is appreciated.
1条答案
按热度按时间afdcj2ne1#
它不是直接的,但是你需要同时用属性date和email分组,然后再用date分组,构造修饰符数组,然后在根目录中替换它,
$group
乘以updatedTime
和modifier
,得到总数$group
,构造键值对中modifier
和count
的对象数组$arrayToObject
将键值对转换为对象$mergeObject
来合并所需的属性,就像我们将date
属性和上面的数组添加到对象操作结果一样$replaceRoot
以替换文档根中的上述合并对象