Mongodb常见查询语句用法总结

我们公司内部针对APP端做了一个网络监控平台,用来监控APP端的网络性能。其中的原始数据是用mongdb存储的。经常会有业务同学找来,说要查看采集的原始数据。在后端RD忙不过来的时候,就需要端上同学自己上手查。这里把经常使用的查询语句总结出来,方便大家参考。

一、统计数据量 count()方法

实例:查找2020.05.30日某个APP(app_id为2)某个域名的网络请求总条数
涉及的表为:req_base_info_20200530
表中每条数据样式为:

{
    "_id" : ObjectId("5ed13183897cd0f9326e846c"),
    "app_id" : NumberLong(5),
    "request_timestamp" : NumberLong(1590768001222),
    "request_timedate" : ISODate("2020-05-30T00:00:01.222+08:00"),
    "url" : "https://xxx.yyy.com/zzz.gif?r=1590768001221",
    "domain" : "xxx.yyy.com"
}

查 询 语 句 为 : \color{blue}{查询语句为:}

db.getCollection('req_base_info_20200530').find({app_id:2,domain:"xxx.yyy.com"}).count()

二、查询某一时间段内的数据

实例:查找2020.05.30日某个APP(app_id为2)某个域名在时间段【18:30:00,19:06:59)内的网络请求总条数
涉及的表为:req_base_info_20200530

查 询 语 句 为 : \color{blue}{查询语句为:}

db.getCollection('req_base_info_20200530').find({app_id:2,domain:"xxx.yyy.com","request_timedate":{"$gte":ISODate("2020-05-30T18:30:00.000+08:00"),"$lt":ISODate("2020-05-30 19:06:59.999+08:00")}}).count()

这里使用到了大于等于、小于比较符;也涉及到了日期的比较。具体语法可以参见:runnoob MongoDB 条件操作符
这里要注意的一点是:日期要用双引号引起来。

三、对某个数据集合中的某一列求和

实例:查找2020.05.30日某个APP(app_id为2)某个域名的网络请求失败总条数
涉及的表为:statistics_error_code_hour_20200530,需要把每个url的失败次数"fail_count"加起来
表中每条数据样式为:

{
    "_id" : ObjectId("5ed1319043cc83f4cb806e16"),
    "app_id" : NumberLong(2),
    "req_time" : ISODate("2020-05-30T00:00:00.000+08:00"),
    "url_remove_parm" : "https://xxx.yyy.com/ttt/uuu",
    "fail_count" : NumberLong(190),
    "domain" : "xxx.yyy.com",
    "origin_code" : 2
}

查 询 语 句 为 : \color{blue}{查询语句为:}

db.getCollection('statistics_error_code_hour_20200530').aggregate([{$match:{app_id:2,"req_time":{"$gte":ISODate("2020-05-30T18:30:00.000+08:00"),"$lt":ISODate("2020-05-30 19:06:59.999+08:00")},"domain" : "xxx.yyy.com"}},{$group : {_id : null, failCount : {$sum : "$fail_count"}}}])

结果:
{
    "_id" : null, // 主键为null时
    "failCount" : NumberLong(3945)
}

这里使用了aggregate方法,它通过match进行条件筛选和过滤得到想要的数据集合,然后通过group进行统计求和。其中group里的“_id”是主键的意思,如果填写为null,则会将数据集合里每条数据的列"fail_count"的值加起来。
如果_id不为空,则会以此进行分组统计:

db.getCollection('statistics_error_code_hour_20200530').aggregate([{$match:{app_id:2,"req_time":{"$gte":ISODate("2020-05-30T18:30:00.000+08:00"),"$lt":ISODate("2020-05-30 19:06:59.999+08:00")},"domain" : "xxx.yyy.com"}},{$group : {_id : "$url_remove_parm", fail_count : {$sum : "$fail_count"}}}])

结果:
{
    "_id" : "https://xxx.yyy.com/house/yyy/lll",
    "fail_count" : NumberLong(107)
}

{
    "_id" : "https://xxx.yyy.com/config/ttt/qqq",
    "fail_count" : NumberLong(87)
}

......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值