Python 使用正则表达式进行MongoDB条件查询

一、统计

db.VideoProfile.find( {_id: { $regex: /^1_[0-9]{5,}$/} } ).count()

其中正则表达式为 /^1_[0-9]{5,}$/

/^正则开始符号,$/正则结束标记

1_表示以此为开始

[0-9]代表数字

{5,}表示前面的数字至少出现5次,无上限

二、Python 代码

def extract_qq(batch_num, platform, profile_collection, path):
    """
    :param path: qq号导出文件路径
    :param platform: 平台
    :param profile_collection: 数据库集合
    :type batch_num: int
    """
    qq_file = open(path, 'w')
    key = "name" if platform == "PAC" else "_id"
    cnt = profile_collection.count({key: {"$regex": "1_[0-9]{5,}"}})
    print("cnt = %d" % cnt)
    length = int(math.ceil(cnt / float(batch_num)))
    # 数据库查询QQ号,导出到本地文件
    for x in xrange(0, length):
        print("%d/%d" % (x, length))
        cursor = profile_collection.find({key: {"$regex": "1_[0-9]{5,}"}}, {key: 1}).limit(batch_num).skip(x*batch_num)
        for user_profile in cursor:
            qq_file.write(user_profile.get(key).split("1_")[1] + "\n")
        cursor.close()
    qq_file.close()

因为库里数据量较大,需要分批次读取,使用limit和skip函数可以实现该功能,skip表示从第几行开始读取,limit表示一次读取多少量

由于只要提取Key字段,所以查询条件{key:1}, 其他字段不必查询,这样可以降低空间复杂度

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏debugeeker的专栏

《coredump问题原理探究》windows版7.5节iterator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

742
来自专栏深度学习思考者

DL开源框架Caffe | 目标检测Faster-rcnn训练自己数据问题整理

数据集制作   Pascal_voc数据集可以做目标检测,目标分割,识别等任务,本文主要针对目标检测的任务,因此只需要其中几个文件夹,也就是我们制作自己的数据集...

2777
来自专栏ATYUN订阅号

最新!TensorFlow 1.9.0正式版发布

TensorFlow 1.9.0正式版发布了,下面是更新和改进的细节,更详细的信息请到网站查阅:github.com/tensorflow/tensorflow...

1482
来自专栏跟着阿笨一起玩NET

T4模板语法

T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit。

921
来自专栏州的先生

对Python渗透测试探测器的改善

752
来自专栏NetCore

Visual C#.Net网络程序开发-Tcp篇(2) 祥细内容:

前面我们说,TcpClient类创建在Socket之上,在Tcp服务方面提供了更高层次的抽象,体现在网络数据的发送和接受方面,是TcpClient使用标准的St...

5785
来自专栏软件测试经验与教训

Python学习笔记(文件)

3519
来自专栏小鹏的专栏

windows下C++如何调用matlab程序

实验平台:    matlab R2016b   VS2013 思路: 1. 设置matlab的编译器,使用外部的VC或者gcc等编译器。 2. 编译m文件成d...

2279
来自专栏java初学

一致性哈希算法(consistent hashing)

52114
来自专栏韩东吉的Unity杂货铺

零基础入门 36:代码控制预设

上一篇分享给大家带来了如何通过菜单栏呼出一个自定义的窗口,不知道大家消化的如何了呢?

1084

扫码关注云+社区

领取腾讯云代金券