每日计数和每周计数mongo数据

BhanuPratap

下面是使用的代码,使用下面的查询获取每日唯一记录,如何编写查询以获取每周唯一记录,如果可能的话,一周内(星期一至星期五)仅5天唯一计数,我们该如何每天修改唯一记录计数以下查询可获取每周唯一记录计数。

 db.custom.aggregate([
        {
                $match: {
                    "loginLogoutTime": {
                        "$gte": ISODate("2020-04-10T14:30:00.000-0400"),
                        "$lt": ISODate("2020-04-11T14:32:00.000-0400")
                    }
                }
            },
            {
                $group: {
                    _id: {Dates: {$dateToString: {format: "%Y-%m-%d", date: "$loginLogoutTime"}}, Role: "$customROLE"},
                    uniqueCount: {$addToSet: "$id"}
                }
            },
            {
                $project: {
                    "_id": NumberInt(0),
                    "Dates": "$_id.Dates",
                    "ROLE": "$_id.Role",
                    "TOTALUSERS": {$size: "$uniqueCount"}
                }
            }
        ])
    
    the output looks from above query:
     "Dates" : "2020-04-10",
        "ROLE" : "PFS_CW_TECH",
        "TOTALUSERS" : 374
        
        
         "Dates" : "2020-06-16",
        "ROLE" : "CFS_CW_TECH",
        "TOTALUSERS" : 277
        

还有Schema对象集合:

/* 1 */
{
    "_id" : 55,
    "id" : "dm4955",
    "host" : "iefs-las.web.lh.com",
    "Role" : "CFS_CW_TECH",
    "event" : "TIMEOUT",
    "timeoutTimeStamp" : ISODate("2018-10-26T14:33:13.000Z"),
    "lastupdatedTimeStamp" : ISODate("2018-10-26T18:33:14.663Z"),
    "recordPublishIndicator" : "Y",
    "__v" : 0
}

/* 2 */
{
    "_id" : 38,
    "attUid" : "mo441b",
    "host" : "iefs-las.web.lh.com",
    "Role" : "PFS_CW_TECH",
    "event" : "LOGIN",
    "loginLogoutTime" : ISODate("2018-10-26T14:41:34.000Z"),
    "lastupdatedTimeStamp" : ISODate("2018-10-26T14:41:35.220Z"),
    "recordPublishIndicator" : "Y",
    "__v" : 0
}

从上面的查询中获取角色名称的每日唯一记录数:例如:对于上述查询输出中的每日唯一记录数,例如一周的每日记录(Mond-fri),如何修改查询以获取groupby角色名称的唯一数。

"Dates" : "2020-04-10",
    "ROLE" : "PFS_CW_TECH",
    "TOTALUSERS" : 374
    
    "Dates" : "2020-04-12",
    "ROLE" : "PFS_CW_TECH",
    "TOTALUSERS" : 384
                                                                                                                                               "Dates" : "2020-06-16",
    "ROLE" : "CFS_CW_TECH",
    "TOTALUSERS" : 277 
hhharsha36

您可以使用下面的汇总查询来获取唯一的每周记录。

db.custom.aggregate([
    {
        $match: {
            "loginLogoutTime": {
                "$gte": ISODate("2020-04-10T14:30:00.000-0400"),
                "$lt": ISODate("2020-04-11T14:32:00.000-0400")
            }
        }
    },
    {
        $group: {
            _id: {Dates: {$week: "$start_date"}, Role: "$role"},
            uniqueCount: {$addToSet: "$id"}
        }
    },
    {
        $project: {
            "_id": NumberInt(0),
            "WeekNumber": "$_id.Dates",
            "ROLE": "$_id.Role",
            "TOTALUSERS": {$size: "$uniqueCount"}
        }
    }
])

这种方法的缺点是,尽管可以进行预测并获得$group阶段中的实际日期,但是您将获得分组日期的星期数而不是完整日期

为了获得一周(即星期一至星期五)的工作日计数,您可以使用下面的汇总查询。

db.custom.aggregate([
    {
        $match: {
            "loginLogoutTime": {
                "$gte": ISODate("2020-04-10T14:30:00.000-0400"),
                "$lt": ISODate("2020-04-11T14:32:00.000-0400")
            },
            "$expr": {
                "$and": [
                    {"$gt": [{"$dayOfWeek": "$start_date"}, 1]},
                    {"$lt": [{"$dayOfWeek": "$start_date"}, 7]}
                ]
            },
        }
    },
    {
        $group: {
            _id: {Dates: {$week: "$start_date"}, Role: "$role"},
            uniqueCount: {$addToSet: "$id"}
        }
    },
    {
        $project: {
            "_id": NumberInt(0),
            "WeekNumber": "$_id.Dates",
            "ROLE": "$_id.Role",
            "TOTALUSERS": {$size: "$uniqueCount"}
        }
    }
])

更新:以下汇总将根据注释部分中讨论的您的要求进行操作。

db.custom.aggregate([
    {
        $match: {
            "loginLogoutTime": {
                "$gte": ISODate("2020-01-10T14:30:00.000-0400"),
                "$lt": ISODate("2020-09-11T14:32:00.000-0400")
            },
            "$expr": {
                "$and": [
                    {"$gt": [{"$dayOfWeek": "$loginLogoutTime"}, 1]},
                    {"$lt": [{"$dayOfWeek": "$loginLogoutTime"}, 7]}
                ]
            },
        }
    },
    {
        $group: {
            _id: {
                "Date": { 
                    $dateToString: { 
                        format: "%Y-%m-%d", 
                        date: "$loginLogoutTime" 
                    } 
                }, 
                "weekNumber": {
                    $dateToString: { 
                        format: "%Y-%m", 
                        date: "$loginLogoutTime" 
                    } 
                }, 
                "role": "$customROLE",
            },
            uniqueDayCount: {"$addToSet": "$_id"},
        }
    },
    {
        $group: {
            _id: {"weekNumber": "$_id.weekNumber", Role: "$_id.role"},
            "TOTALUSERS": {$sum: {$size: "$uniqueDayCount"}},
        }
    },
], { allowDiskUse: true})

我还建议索引loginLogoutTime以实现最佳查询性能

db.custom.createIndex({"loginLogoutTime": 1})

注意:我尚未测试查询结果,因此请在出现任何错误的情况下进行报告

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongodb每周计数行

来自分类Dev

Mongo聚合游标和计数

来自分类Dev

GroupBy 每周在 Pandas 和其他列中计数

来自分类Dev

R:将具有相同日期和属性的数据行聚合为时间序列的每周计数

来自分类Dev

mongo从提供的数据数组中计数行

来自分类Dev

在 Mongo DB 中分组和计数

来自分类Dev

计数和分组mysql数据

来自分类Dev

计数每周的记录数,得出大量的NULL

来自分类Dev

在mongo计数更多的值

来自分类Dev

Mongo DB,计数文档

来自分类Dev

流星+ Mongo平均计数

来自分类Dev

MySQL获取计数和日期之间的数据

来自分类Dev

数据框的多个计数和中值

来自分类Dev

Pyspark Dataframe数据透视和分组计数

来自分类Dev

PySpark合并数据框和计数值

来自分类Dev

计数联接和限制计数

来自分类Dev

Mongo Aggregation:$ group和$ project数组以对象计数

来自分类Dev

在熊猫中将每日数据转换为每周数据

来自分类Dev

将每日数据拆分为每周数据

来自分类Dev

熊猫数据框获取每日/每周/每小时数据

来自分类Dev

将每日交易数据转换为每周末的总和

来自分类Dev

将每日数据汇总到每周,直到今天结束

来自分类Dev

Mongo计数聚合返回0

来自分类Dev

按年/月和用户计数和分组数据

来自分类Dev

从R周开始的每周将每日数据转换为每周

来自分类Dev

如何使用数据在格林威治标准时间的本地时间查询每日计数

来自分类Dev

从具有计数和基于计数条件的数据库中选择?

来自分类Dev

从具有计数和基于计数条件的数据库中选择?

来自分类Dev

从数据框中获取唯一ID计数的数量,并为计数和值创建新列