我在Schema中有一个包含以下内容的数据集:
Schema({
'ID': {type:Number},
'Date': {type:Date},
'DrivingHours':{type:Number}
})我喜欢通过将以下结果组合在一起来聚集:
[
{
"DrivingHours": [
{
"9": 2.6061111111111113,
"36": 0,
"54": 0.016944444444444446,
"Date": "2019-9-1"
},
{
"9": 0.5738888888888889,
"36": 0,
"54": 0,
"Date": "2019-9-2"
},
...因为钥匙是我的车辆ID。使用下面的管线,我接近了我的目标,但无法集成“日期”。在使用'$replaceRoot‘之后如何添加这个参数有什么窍门吗?
{$facet: {
DrivingHours: [
{$group: {_id: {Date: '$Date', ID: '$ID'},
ID: {$first: '$ID'},
DrivingHours: {$first: '$DrivingHours'}
}},
{$group: {_id: '$_id.Date',
arrDrivingHours: {
$push: {'k': { $toString: '$ID' }, 'v':{ $ifNull: [ '$DrivingHours', 0 ] }}
}}},
{'$replaceRoot':{
newRoot: {$arrayToObject:'$arrDrivingHours'}
}
}
]
}}我使用facet,因为我喜欢稍后添加数据集的其他方面,但这非常有效。
发布于 2019-09-19 01:59:14
我只需要在"$mergeObjects“中添加Date对象。因此,解决方案是:
{$facet: {
DrivingHours: [
{$group: {_id: {Date: '$Date', ID: '$ID'},
ID: {$first: '$ID'},
DrivingHours: {$first: '$DrivingHours'}
}},
{$group: {_id: '$_id.Date',
arrDrivingHours: {
$push: {'k': { $toString: '$ID' }, 'v':{ $ifNull: [ '$DrivingHours', 0 ] }}
}}},
{'$replaceRoot':{
newRoot: {"$mergeObjects": [
{"Date": "$_id.Date"},
{$arrayToObject: "$ObjDrivingHours"}
]
}
}
}
]
}
}https://stackoverflow.com/questions/57968170
复制相似问题