python连接mongodb数据库对于指定时间范围内的数据进行查询统计

mongodb查询语句:

db.service_call_log.aggregate([
    {
        $match: {
            "startTime": {
                "$gte": ISODate("2018-01-06 23:54:50"),
                 "$lt": ISODate("2018-01-06 23:59:51")
            }
        }
    },
    {
        $group: {
            _id: "$serviceId",
            count: {
                $sum: 1
            }
        }
    }
])

显示结果:

在这里插入图片描述

python代码:

# !/user/bin/env python3
# -  *  - coding:utf-8 -  *  - 
from dateutil.parser import * 
from pymongo import MongoClient
from random import randrange as rand
#连接mongodb数据库
cxn = MongoClient(host = '127.0.0.1', port = 27017)
users = cxn.test.service_call_log
COLSIZ = 39
#用空格将字段填充至制定长度
def tformat(s):return str(s).title().ljust(COLSIZ)
# 将单词首字母大写;ljust()左对齐,并使用空格填充直至达到指定长度
def cformat(s):return s.upper().ljust(COLSIZ)
FIELDS = (
 'requestId', 'status', 'direction', 'result', 'startTime', 'endTime',   'serviceId')
FIELDS2=('_id','count')
#python无法直接 运行ISODate("2018-01-06 23:54:50"),会报错NameError: name 'ISODate' is not defined,需要用dateutil.parser.parse('2018-01-06 23:54:50')
myDatetime = parse('2018-01-06 23:54:50')
myDatetime2 = parse('2018-01-06 23:59:51')
#格式化显示标题行
print('\n%s' % ''.join(map(cformat, FIELDS)))
#输出指定时间范围内的数据
for user in users.aggregate([
    {'$match': {'startTime': {'$gte':myDatetime,'$lt':myDatetime2}}}
]):print(''.join(map(tformat, (user[k] for k in FIELDS))))
#输出指定时间范围内的以serviceId为统计指标的数据
print('\n%s' % ''.join(map(cformat, FIELDS2)))
for user in users.aggregate([
    {'$match': {'startTime': {'$gte':myDatetime,'$lt':myDatetime2}}},
    {'$group':{'_id':'$serviceId',
               'count':{'$sum':1}
               }}
]):    print(''.join(map(tformat, (user[k] for k in FIELDS2))))

显示结果:

在这里插入图片描述

报错原因:

一般是语法错误引起,python中的mongoClient方法和直接用mongodb的语法是有一些不同的,可以参考下这篇《MongoClient—Python》文章中的一些基本示例,地址如下:

https://blog.youkuaiyun.com/jiuzhibuguniao/article/details/80457453
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值