如何解决“ SelectMany”-在mongodb聚合管道中等效
提供以下文件:
/* 1 */
{
"_id" : ObjectId("5f38fb2b52e28012a8f175f9"),"date" : "2020-08-16","values" : {
"wert1" : 5.0,"wert2" : 9.0
}
}
/* 2 */
{
"_id" : ObjectId("5f38fb2b52e28012a8f175fa"),"values" : {
"wert1" : 3.0,"wert3" : 10.0
}
}
如何将其转换为以下内容:
{ "wert1": [ { "2020-08-16": "8.0" } ] },{ "wert2": [ { "2020-08-16": "9.0" } ] },{ "wert3": [ { "2020-08-16": "10.0" } ] }
理论上讲是:
- “ SelectMany”
$values.$key
- 按
$key
和$date
值$sum
分组 - 转换
此“ SelectMany”的运算符是什么?
解决方法
通常$unwind将充当SelectMany
。在您的情况下,这有点复杂,因为您想按键名进行汇总,因此还需要$objectToArray和$arrayToObject运算符:
db.collection.aggregate([
{
$project: {
date: 1,values: { $objectToArray: "$values" }
}
},{ $unwind: "$values" },{
$group: {
_id: { date: "$date",key: "$values.k" },total: { $sum: "$values.v" }
}
},{
$group: {
_id: "$_id.key",v: { $push: { $arrayToObject: [ [ { k: "$_id.date",v: "$total" } ] ] } }
}
},{
$replaceRoot: {
newRoot: {
$arrayToObject: [ [ { k: "$_id",v: "$v" } ] ]
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。