【问题标题】:How do you get DayHours from Mongo date field?你如何从 Mongo 日期字段中获取 DayHours?
【发布时间】:2013-11-15 23:53:10
【问题描述】:

我正在尝试在 mongo 聚合函数中按 DayHours 分组以获取过去 24 小时的数据。 例如:如果事件的时间是星期五 6:00,则“DayHour”将是 6-5。 我可以通过以下查询轻松地按小时分组:

db.api_log.aggregate([
    { '$group': { 
        '_id': { 
            '$hour': '$time'
        }, 
        'count': { 
          '$sum':1 
        } 
      } 
    },
    { '$sort' : { '_id': -1 } }
  ])

我觉得有更好的方法来做到这一点。我已经尝试在 $project 语句中进行连接,但是您只能在 mongo 中连接字符串(显然)。 我实际上只需要按天和小时分组,但是它已经完成了。谢谢。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    我假设time 字段包含ISODate。 如果你只想要最后 24 小时,你可以使用这个:

    var yesterday = new Date((new Date).setDate(new Date().getDate() - 1));
    
    db.api_log.aggregate(
        {$match: {time: {$gt: yesterday}}},
        {$group: {
            _id: {
                hour: {$hour: "$time"},
                day: {$dayOfMonth: "$time"},
            },
            count: {$sum: 1}
        }}
    )          
    

    如果您想按天数进行一般分组,您可以使用:

    db.api_log.aggregate(
        {$group: {
            _id: {
                hour: {$hour: "$time"},
                day: {$dayOfMonth: "$time"},
                month: {$month: "$time"},
                year: {$year: "$time"}
            },
            count: {$sum: 1}
        }}
    )
    

    【讨论】:

      【解决方案2】:

      这本身也不是一个答案(我现在没有 mongodb 来提供答案),但我认为你不能仅仅使用聚合框架来做到这一点(我可能错了,所以我会解释自己)。

      您可以使用.getTimestamp 方法从mongoId 获取日期和时间信息。您无法在 mongo 查询中输出此信息的问题(db.find({},{_id.getTimestamp}) 之类的东西不起作用)。您也不能按此字段搜索(使用$where 子句除外)。

      因此,如果可以实现,只能使用 mapreduce 来完成,在 reduce 函数中,您根据 getTimestamp 的输出进行分组。

      如果这是您要经常执行的查询,我建议您将date 字段添加到您的文档中,因为使用此字段您将能够正确聚合您的数据,并且您可以使用 indeces 不扫描所有您的收藏(就像您对 $sort -1 所做的那样,但对于 $match 仅是大于 current date - 24 hours 的部分)。

      我希望即使没有代码也能提供帮助。如果没有人能够回答这个问题,我明天会尝试玩它。

      【讨论】:

        猜你喜欢
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 2018-11-29
        • 2011-05-30
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        相关资源
        最近更新 更多