【问题标题】:Query to count number of occurrence in array grouped by day查询以按天分组的数组中的出现次数
【发布时间】:2018-06-23 19:17:27
【问题描述】:

我的文档结构如下:

(trackerEventsCollection) = 
    {
        "_id" : ObjectId("5b26c4fb7c696201040c8ed1"),
        "trackerId" : ObjectId("598fc51324h51901043d76de"),
        "trackingEvents" : [ 
            {
                "type" : "checkin",
                "eventSource" : "app",
                "timestamp" : ISODate("2017-08-25T06:34:58.964Z")
            }, 
            {
                "type" : "power",
                "eventSource" : "app",
                "timestamp" : ISODate("2017-08-25T06:51:23.795Z")
            }, 
            {
                "type" : "position",
                "eventSource" : "app",
                "timestamp" : ISODate("2017-08-25T06:51:23.985Z")        
            }
        ]
    }

我想编写一个查询来计算类型为 "type" : "power" 的 trackingEvents 的数量,按天分组。这对我来说似乎很棘手,因为父文档没有日期,我应该依赖属于 trackingEvents 数组成员的 timestamp 字段。 我不是真正有经验的 mongodb 用户,到目前为止还无法理解如何实现这一点。 非常感谢任何帮助,谢谢

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    要将嵌套数组作为单独的文档处理,您需要使用$unwind. 在下一阶段,您可以使用 $match 过滤掉type。然后,您可以按单日计数发生次数进行分组。关键是您必须像下面的代码一样构建包含年、月和日的分组键:

    db.trackerEvents.aggregate([
        { $unwind: "$trackingEvents" },
        { $match: { "trackingEvents.type": "power" } },
        {
            $group: {
                _id: {
                    year: { $year:"$trackingEvents.timestamp" },
                    month:{ $month:"$trackingEvents.timestamp" },
                    day: { $dayOfMonth:"$trackingEvents.timestamp" }
                },
                count: { $sum: 1 }
            }
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2013-03-19
      • 2015-06-27
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多