PyMongo使用入门(二)
来源:互联网 发布:mac fifa 编辑:程序博客网 时间:2024/06/18 06:16
聚合管道和MapReduce知识点
import pymongofrom bson import Codefrom pymongo import MongoClientfrom bson.objectid import ObjectIdfrom bson.son import SONimport datetimeclient = MongoClient('localhost', 27017)db = client.PymongoDemo"""result = db.things.insert_many([{"x": 1, "tags": ["dog", "cat"]}, {"x": 2, "tags": ["cat"]}, {"x": 2, "tags": ["mouse", "cat", "dog"]}, {"x": 3, "tags": []}])print(result.inserted_ids)""""""管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。$limit:用来限制MongoDB聚合管道返回的文档数。$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。$group:将集合中的文档分组,可用于统计结果。$sort:将输入文档排序后输出。$geoNear:输出接近某一地理位置的有序文档。"""pipeline = [ {"$unwind": "$tags"}, {"$group": {"_id": "$tags", "count": {"$sum": 1}}}, {"$sort": SON([("count", -1), ("_id", -1)])} ]"""以上实例类似sql语句: select tags, count(*) from things group by tags"""print(list(db.things.aggregate(pipeline)))"""使用command()方法 要运行这种聚合的执行计划:"""print(db.command('aggregate', 'things', pipeline=pipeline, explain=True))print("-"*20)mapper = Code(""" function () { this.tags.forEach(function(z) { emit(z, 1); }); } """)reducer = Code(""" function (key, values) { var total = 0; for (var i = 0; i < values.length; i++) { total += values[i]; } return total; } """)"""最后我们调用map_reduce()和遍历结果集"""result = db.things.map_reduce(mapper, reducer, "myresults")for doc in result.find(): print(doc)print("-"*20)#高级 Map/Reducedb.things.map_reduce(mapper, reducer, "myresults", full_response=True)result = db.things.map_reduce(mapper, reducer, "myresults", query={"x": {"$lt": 2}})for doc in result.find(): print(doc)print("-"*20)# db.things.map_reduce(mapper, reducer, out=SON([("replace", "results"), ("db", "outdb")]), full_response=True)"""group()方法提供了一些相同的功能SQL的GROUP BY。比map reduce简单,需要提供一个键到分组,作为聚集的初始值和reduce函数。"""reducer = Code(""" function(obj, prev){ prev.count++; } """)results = db.things.group(key={"x":1}, condition={}, initial={"count": 0}, reduce=reducer)for doc in results: print(doc)
运行结果如图:
0 0
- PyMongo使用入门(二)
- PyMongo使用入门(一)
- PyMongo使用入门(三)
- PyMongo使用入门(四)
- PyMongo使用入门(五)
- PyMongo使用入门(六)
- PyMongo使用入门(七)
- Pymongo Tutorial & Pymongo入门教
- pymongo使用
- pymongo 使用
- mongoDB-pymongo-入门
- pymongo(1) pymongo的基本使用
- pymongo使用问题汇总
- PyMongo基本使用
- PyMongo基本使用
- pymongo 使用小结
- PyMongo基本使用
- PyMongo基本使用
- 自组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map)
- codevs 1503 愚蠢的宠物
- 嵌入式Web开发——Boa服务器移植
- PHP 5.x.x 使用date()出现警告问题
- 【NOIP2015_Day1_T3】斗地主
- PyMongo使用入门(二)
- 2016年湖南省第十二届大学生计算机程序设计竞赛(重现) A 2016
- PAT乙级.1023. 组个最小数 (20)
- LightOJ1278 Sum of Consecutive Integers 素数筛法+数学分析
- Linux0.12引导启动程序
- 新手新发现
- mysql服务器cpu爆满解决办法
- hdu3746
- jQuery复习