Mongodb按日期汇总与空的日程箱

时间:2014-08-01 11:35:08

标签: node.js mongodb mongoose

我正在尝试在MongoDB中进行每日聚合。我已经有一个聚合,我按天成功地对数据进行分组。但是,我希望以这样的方式进行聚合,其中天没有数据显示,但是空。也就是说,它们是空箱。

以下是我到目前为止的情况。我无法在MongoDB文档中找到任何内容,或者建议如何进行聚合并生成空箱:

app.models.profile_view.aggregate(
    { $match: { user: req.user._id , 'viewing._type': 'user' } },
    { $project: { 
        day: {'$dayOfMonth': '$start'},month: {'$month':'$start'},year: {'$year':'$start'},
        duration: '$duration'
    } },
    { $group: {
        _id: { day:'$day', month:'$month', year:'$year' },
        count: { $sum: 1 },
        avg_duration: { $avg: '$duration' }
    } },
    { $project: { _id: 0, date: '$_id', count: 1, avg_duration: 1 }}
).exec().then(function(time_series) {
    console.log(time_series)
    return res.send(200, [{ key: 'user', values: time_series }])
}, function(err) {
    console.log(err.stack)
    return res.send(500, { error: err, code: 200, message: 'Failed to retrieve profile view data' })
})

1 个答案:

答案 0 :(得分:8)

我认为您无法使用聚合解决此问题。当您使用$ group时,mongo只能根据您提供的数据进行分组。在这种情况下,mongo将如何知道缺少哪些日期值,甚至知道可接受日期的范围是什么?

我认为您最好的选择是将缺少的日期值添加到汇总结果中。