`

pymongo 查询代码sample

 
阅读更多

http://www.cnblogs.com/shanyou/p/3494854.html

在这个网址学习了一下mongo聚合查询

 

两个用pymongo查询的代码示例

    def get_realtime_users(self):
        rt = []

        try:
            #start_time_obj = datetime.strptime(startTime, '%Y-%m-%d')
            #end_time_obj = datetime.strptime(endTime, '%Y-%m-%d')
            #post = {'userId':userId, 'time':{'$gte':start_time_obj, '$lte':end_time_obj}}
            #post['time'] = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
            now = datetime.now()
            delta = timedelta(days=7)
            time_from = now - delta
            post = {'time': {'$gte': time_from}}
            doc = {'_id':0}
            pageType_dict = dict()
            for item in self._pageTypeMapping:
                pageType_dict[item['id']] = item['pageType']
            cursor = self.mdbBb[g_tableOperationRecord].find(post, doc).sort([('time',pymongo.DESCENDING)])
            for item in cursor.batch_size(100):
                #print(item['time'], type(item['time']))
                #print(item)
                item['pageType'] = pageType_dict.get(item['pageType'])
                rt.append(item)
        except Exception as e:
            traceback.print_exc()
            logging.error(e.__str__())
        return rt

    def get_pagetype_rank(self):
        rt = []
        try:
            now = datetime.now()
            delta = timedelta(days=7)
            time_from = now - delta

            doc = {'_id':0, 'pageType':1, 'time':1}
            match = {
                'time': {'$gte': time_from},
            }
            group = {
                '_id': '$pageType',
                'count': {'$sum': 1}
            }
            sort = {'count': -1}
            pageType_dict = dict()
            for item in self._pageTypeMapping:
                pageType_dict[item['id']] = item['pageType']

            #db.department.aggregate({'$group':{'_id':'$name','total_area':{'$sum':'$area'}}})
            #cursor = self.mdbBb[g_tableOperationRecord].find(post, doc)
            cursor = self.mdbBb[g_tableOperationRecord].aggregate([
                {'$project': doc},
                {'$match': match},
                {'$group': group},
                {'$sort': sort},
                #{'$limit': 3},
            ])
            #print(pageType_dict)
            for item in cursor['result']:
                #print(item)
                item['_id'] = pageType_dict.get(item['_id'])
                rt.append(item)
            #print('rt',rt)
        except Exception as e:
            traceback.print_exc()
            logging.error(e.__str__())
        return rt
 
aggregate中 $group复合键写法
	'$group':{
		_id: {projid: '$remarks.projId', pageid: '$remarks.pageid'},
		count: {$sum: 1}

	} 
 
    def get_projectpage_rank(self):
        '''项目页面访问排行'''
        rt = []
        try:
            now = datetime.now()
            delta = timedelta(days=7)
            time_from = now - delta
            #doc = {'_id':0, 'pageType':1, 'time':1}
            match = {
                #'time': {'$gte': time_from},
                'remarks.projId': {'$exists': True},
                'remarks.pageid': {'$exists': True}
            }
            group = {
                '_id': {'projid': '$remarks.projId', 'pageid': '$remarks.pageid'},
                'count': {'$sum': 1}
            }
            sort = {'count': -1}

            cursor = self.mdbBb[g_tableOperationRecord].aggregate([
                #{'$project': doc},
                {'$match': match},
                {'$group': group},
                {'$sort': sort},
                {'$limit': 50},
            ])

            for item in cursor['result']:
                print(item)
                rt.append(item)
            print('rt',rt)
        except Exception as e:
            traceback.print_exc()
            logging.error(e.__str__())
        return rt
 
注意, $match是对 $project里列出的字段来匹配的,如果project里没有,则match不到
例如以下是错的
            project= {'_id':0, 'pageType':1, 'time':1}
            match = {
                'time':{'$gte':start_time, '$lte':end_time},
                'userId': userId,#projectl里没有userId字段
            }
这是对的
            doc = {'_id':0, 'pageType':1, 'time':1, 'userId':1}
            match = {
                'time':{'$gte':start_time, '$lte':end_time},
                'userId': userId,
            }
 
分享到:
评论

相关推荐

    Python-模拟pymongo集合对象的小型库用于测试目的

    使用`mongomock`进行测试时,首先需要在测试代码中导入并设置模拟的MongoDB连接,然后就可以像使用真实的`pymongo`一样操作模拟的集合。测试完成后,由于所有操作都在内存中完成,因此无需清理数据库。这种轻量级的...

    linux安装pymongo,命令行可import,代码中报错

    `pymongo`是Python的一个库,用于与MongoDB数据库进行交互,它包含了丰富的功能,如连接MongoDB服务器、执行查询、插入和更新文档等。`bson`是`pymongo`的一部分,用于处理MongoDB的BSON(Binary JSON)数据格式。在...

    pymongo-1.9.tar.gz

    2. 接下来,下载pymongo-1.9的源代码包。你可以通过wget命令从官方网站或者其他可靠的源获取: ``` wget http://example.com/pymongo-1.9.tar.gz ``` 3. 解压下载的tar.gz文件: ``` tar -zxvf pymongo-1.9....

    pymongo的使用和开发

    Pymongo支持动态查询,允许我们在运行时根据需要查询任何结构的文档。 3. **分布式支持:** MongoDB支持分布式部署,可以跨多个服务器和数据中心进行扩展,以处理大量数据和高并发访问。Pymongo提供了连接分片集群...

    pymongo-2.3.tar.gz

    在Python中,我们通常使用pymongo库作为MongoDB的客户端工具,它为Python开发者提供了丰富的接口,以进行数据库的连接、查询、更新等操作。本文将详细介绍pymongo-2.3版本,它是pymongo的一个重要里程碑。 1. ...

    Python-FlaskPyMongo支持Flask应用的PyMongo

    Flask-PyMongo简化了在Flask应用中集成PyMongo的过程,提供了便捷的接口来配置数据库连接、执行查询、插入、更新和删除数据。下面我们将深入探讨Flask-PyMongo的关键概念和使用方法。 ### 1. 安装与配置 首先,你...

    Python库 | pymongo-3.7.0-py3.4-macosx-10.6-intel.egg

    例如,创建数据库只需一行代码`db = client['database_name']`,插入文档则可使用`db.collection.insert_one(document)`,查询数据则利用`db.collection.find()`,更新数据使用`db.collection.update_one(filter, ...

    pymongo-2.7.tar.gz

    《深入理解pymongo 2.7:Python的MongoDB驱动》 MongoDB,作为一款高性能、开源的文档型数据库,因其灵活性和易用性在众多NoSQL数据库中脱颖而出。而pymongo则是Python社区中广泛使用的MongoDB驱动程序,它为Python...

    Python库 | pymongo-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl

    pymongo的核心操作主要包括连接数据库、选择集合、插入文档、查询数据、更新和删除记录等。以下是一些基本示例: 1. 连接MongoDB: ```python from pymongo import MongoClient client = MongoClient('mongodb://...

    pymongo--mongodb python文档

    本教程旨在介绍如何使用PyMongo与MongoDB进行交互。MongoDB是一个面向文档的NoSQL数据库,而PyMongo是其Python语言的官方驱动程序,允许Python程序与MongoDB数据库进行通信。本教程假设您已经下载并安装了MongoDB,...

    PyPI 官网下载 | pymongo-3.2.1-py3.2-win32.egg

    2. 数据操作:通过游标对象,pymongo可以方便地查询和迭代数据库中的文档,支持复杂查询条件和聚合操作。 3. 文档操作:pymongo支持创建、修改和删除MongoDB中的文档,提供了类似字典的接口,便于操作JSON格式的...

    pymongo使用方法

    在Python中,通过PyMongo库,我们可以方便地进行连接、查询、更新和删除等操作。 **连接MongoDB** 要连接到MongoDB,首先需要导入`pymongo`模块中的`MongoClient`类。连接的基本语法是: ```python from pymongo ...

    pymongo驱动程序安装方法

    pymongo驱动程序安装方法,解压pymongo-2.7.2.tar.gz

    Python库 | pymongo-3.3.0-cp27-none-macosx_10_11_intel.whl

    Python库pymongo是连接和操作MongoDB数据库的官方驱动程序。MongoDB是一个流行的NoSQL数据库,以JSON...在使用pymongo时,开发者需要注意错误处理、连接池管理以及优化查询性能等方面,确保应用程序的稳定性和效率。

    Python库 | pymongo-3.11.0-cp27-cp27m-manylinux1_i686.whl

    首先,pymongo是一个功能丰富的Python接口,它允许开发者直接在Python代码中执行几乎所有的MongoDB操作,包括数据的插入、查询、更新和删除。在pymongo-3.11.0版本中,开发者可以享受到一系列增强的功能和优化的性能...

    pymongo实现多结果进行多列排序的方法

    示例代码如下: ```python from pymongo import MongoClient, ASCENDING, DESCENDING # 连接MongoDB client = MongoClient('localhost', 27017) db = client['test_database'] collection = db['accounts'] # ...

    Python库 | pymongo-3.0.1.win32-py3.4.exe

    MongoDB是一个流行的开源、分布式文档型数据库,而pymongo则是Python编程语言与MongoDB之间的桥梁,使得Python开发者能够方便地进行数据存储、查询、更新和删除等操作。 在Python中,pymongo库提供了丰富的API,...

Global site tag (gtag.js) - Google Analytics