MongoDB聚合管道python

罗希特·马哈拉希

我有一组日志文件,我需要查找系统在给定日期范围内显示消息“连接时超出平均限制...”的次数,并显示给定日期范围内所有系统的结果按降序排列

目前我在 mongodb 集合中的文档看起来像

{'computerName':'APOOUTRDFG', 'datetime': 11/27/2019 10:45:23.123 'message': 'Average limit ....' } 因此,我尝试通过首先匹配消息字符串然后按计算机名称对它们进行分组来过滤我的结果,但这对这种情况没有帮助

db.collection.aggregate([
{ "$match": {
   'message': re.compile(r".*Average limit.*")
},
{ "$group": {
    "_id": { "$toLower": "$computerName" },
    "count": { "$sum": 1 }
} }    

])

预期成绩

Date : 01-01-2012 to 31-01-2012

Computer Name Number of Average limit exceeded
computername1 120
computername2 83
computername3 34
喜满树夏尔马

假设您在数据库中有以下数据:

[
  {
    "computerName": "APOOUTRDFG",
    "datetime": "11/27/2019 10:45:23.123",
    "message": "Average limit ...."
  },
  {
    "computerName": "BPOOUTRDFG",
    "datetime": "01/02/2012 10:45:23.123",
    "message": "Average limit ...."
  },
  {
    "computerName": "CPOOUTRDFG",
    "datetime": "01/30/2012 10:45:23.123",
    "message": "Average limit ...."
  },
  {
    "computerName": "DPOOUTRDFG",
    "datetime": "01/30/2012 10:45:23.123",
    "message": "Some other message ...."
  }
]

注意:'datetime' 的格式为 %m/%d/%Y %H:%M:%S.%L 并且输入日期范围的格式为:%d-%m-%Y

以下查询可以获得预期的输出:

db.collection.aggregate([
    {
        $match:{
            "message": /.*Average limit.*/i,
            $expr:{
                $and:[
                    {
                        $gte:[
                            {
                                $dateFromString:{
                                    "dateString":"$datetime",
                                    "format":"%m/%d/%Y %H:%M:%S.%L"
                                }
                            },
                            {
                                $dateFromString:{
                                    "dateString":"01-01-2012",
                                    "format":"%d-%m-%Y"
                                }
                            }
                        ]
                    },
                    {
                        $lte:[
                            {
                                $dateFromString:{
                                    "dateString":"$datetime",
                                    "format":"%m/%d/%Y %H:%M:%S.%L"
                                }
                            },
                            {
                                $dateFromString:{
                                    "dateString":"31-01-2012",
                                    "format":"%d-%m-%Y"
                                }
                            }
                        ]
                    }
                ]
            }
        }
    },
    {
        $group:{
            "_id":{
                $toLower:"$computerName"
            },
            "count":{
                $sum:1
            }
        }
    }
]).pretty()

推荐:最好将日期保存为 ISODate 或 DB 中的时间戳。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongodb聚合管道很慢

来自分类Dev

Mongodb聚合管道项目

来自分类Dev

MongoDB聚合管道问题

来自分类Dev

带循环的MongoDB聚合管道

来自分类Dev

MongoDB聚合管道的新日期

来自分类Dev

mongodb 管道聚合管道替换值

来自分类Dev

MongoDB聚合带有链接对象的管道

来自分类Dev

使用MongoDB聚合管道计数文档

来自分类Dev

MongoDB聚合带有链接对象的管道

来自分类Dev

MongoDb管道聚合$ unwind子子文档

来自分类Dev

MongoDb管道聚合排序子子文档

来自分类Dev

MongoDB的 - 评论Upvoting / Downvoting与聚合管道

来自分类Dev

MongoDB聚合$或$ elemMatch,$ lookr管道中的$ expr

来自分类Dev

mongodb管道聚合组结果放入数组

来自分类Dev

MongoDB使用聚合管道查找和更新

来自分类Dev

“ SelectMany”-在mongodb聚合管道中等效

来自分类Dev

在MongoDB聚合管道中分解数组

来自分类Dev

MongoDB聚合管道输出更改流

来自分类Dev

MongoDB聚合双重查找和管道

来自分类Dev

使用MongoDB聚合管道计数文档

来自分类Dev

具有多个分组的MongoDb聚合管道

来自分类Dev

如何在mongodb聚合管道内使用Javascript对象?

来自分类Dev

使用MongoDB聚合管道展开和汇总子子文档

来自分类Dev

如何在MongoDB聚合管道中隐藏单个子文档?

来自分类Dev

在Mongodb中使用聚合,查找和管道进行查询

来自分类Dev

在聚合管道中设置条件在mongodb中不起作用

来自分类Dev

在MongoDB聚合管道中,如何用数组字段替换root?

来自分类Dev

从MongoDB查询/聚合管道创建特定形状的结果

来自分类Dev

如何在mongodb聚合管道内使用Javascript对象?