我是MongoDB的新手,我试图对已经分组的文档中的数组元素进行分组(我想保留第一个分组)。
我有以下基本文件:
{
user: "user_a",
upload_folder: "folder_x",
created_at: "2018-08-30 00:00:00",
volume: 25678
},
{
user: "user_a",
upload_folder: "folder_x",
created_at: "2018-08-29 00:00:00",
volume: 567
},
{
user: "user_b",
upload_folder: "folder_a",
created_at: "2018-08-30 00:00:00",
volume: 25678
}
我想获得一个结果,该结果首先按日期分组(以获取每天所有传输的数量和数量),然后按用户和文件夹分组,以获取有关每个用户的传输数量和每个用户的数量的信息。
最终结果应如下所示:
[
_id: {month:08, day:30, year: 2018},
totalVolume: 51356,
totalTransfers: 1,
users: [
{
name:user_a,
transfersPerUser:1,
volumePerUser:25678,
destinations:[
folder: "folder_x",
transfersPerDestination: 1,
volumePerDestination: 25678
]
}
]
]
对我来说,第一个问题是:在一个查询中这样做是否有意义,或者我走错了路线?
我已经拥有的是每个日期的分组以及每天的交易量和总和。 但是我不知道如何进行第二次分组,因为每个用户的每次单次传输都在一个数组中。
我试图对数组执行$ unwire并将每个未连接的条目分组。但是如何将结果添加到按日期分组的原始文档中?
获取日期范围内的结果:
$match: {
creationDate: {
$gte: ISODate('2018-08-01 00:00:00'),
$lte: ISODate('2018-08-31 00:00:00')
}
}
按日期分组结果
{
$group: {
_id: {
month: {
$month: "$created_at"
},
day: {
$dayOfMonth: "$created_at"
},
year: {
$year: "$created_at"
},
},
uploads: {
$push: {
"user": "$user",
"upload_folder": "$upload_folder",
"volume": "$volume"
}
},
volumPerDay: {
$sum: "$volume"
},
transfersPerDay: {
$sum: 1
}
}
我该如何进行?然后使用$unwind
?
$unwind { path: "$user"}
非常感谢您的帮助。