Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongodb按日期聚合,带空日箱_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongodb按日期聚合,带空日箱

Node.js Mongodb按日期聚合,带空日箱,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图在MongoDB中进行每日聚合。我已经有了一个聚合,我成功地按天对数据进行了分组。但是,我希望以这样一种方式进行聚合:显示没有数据的天,但为空。也就是说,它们是空箱子 以下是我到目前为止的情况。我在MongoDB文档中找不到任何关于如何进行聚合和生成空垃圾箱的建议: app.models.profile_view.aggregate( { $match: { user: req.user._id , 'viewing._type': 'user' } }, { $proje

我试图在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' })
})

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


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

同意。考虑这一点的一个好方法是认识到,当您想从一个空桶的
$group
阶段创建一个文档时,您要求MongoDB从0个文档的输入集创建一个结果文档。最简单的方法可能是根据您对预期日期范围的额外了解,在应用程序代码中添加空桶。也同意。我认为这是不可能的,但现在我意识到我无论如何都不应该这么做。如果我展示一个纵断面图,如果有几天没有人查看纵断面图,我会看到很多尖峰。如果没有空的日间垃圾箱,图表看起来会更平滑。