pymongo教程(2)聚合操作
程序员文章站
2024-04-05 12:29:24
...
在MongoDB中常用的聚合操作有 aggregation、map/reduce和group 。 首先先添加一些测试数据: db.things.insert({"x": 1, "tags": ["dog", "cat"]})db.things.insert({"x": 2, "tags": ["cat"]})db.things.insert({"x": 2, "tags": ["mouse", "cat", "dog"]})
在MongoDB中常用的聚合操作有 aggregation、map/reduce和group 。
首先先添加一些测试数据:
db.things.insert({"x": 1, "tags": ["dog", "cat"]}) db.things.insert({"x": 2, "tags": ["cat"]}) db.things.insert({"x": 2, "tags": ["mouse", "cat", "dog"]}) db.things.insert({"x": 3, "tags": []})
aggregation
以下例子是统计 tags 字段内的各个值的出现的次数。
from bson.son import SON db.things.aggregate([ {"$unwind": "$tags"}, {"$group": {"_id": "$tags", "count": {"$sum": 1}}}, {"$sort": SON([("count", -1), ("_id", -1)])} ]) {'ok': 1.0, 'result': [{'count': 3, '_id': 'cat'}, {'count': 2, '_id': 'dog'}, {'count': 1, '_id': 'mouse'}]}
注意:aggregate操作要求服务器程序为 2.1.0 以上的版本。PyMongo 驱动程序为 2.3 以上的版本。
Map/Reduce
上面的操作同样也可以使用 Map/Reduce 完成。
from bson.code import Code mapper = Code(""" function () { this.tags.forEach(function(z) { emit(z, 1); }); } """) reducer = Code(""" function (key, values) { var total = 0; for (var i = 0; imap和reduce都是一个javascript的函数; map_reduce 方法会将统计结果保存到一个临时的数据集合中。
Group
group 操作与SQL的 GROUP BY 相似,同时比 Map/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) {'x': 1.0, 'count': 1.0} {'x': 2.0, 'count': 2.0} {'x': 3.0, 'count': 1.0}注意:在MongoDB的集群环境中不支持 group 操作,可以使用 aggregation 或者 map/reduce 代替。
完整的MongoDB聚合文档: http://docs.mongodb.org/manual/aggregation/
原文地址:pymongo教程(2)——聚合操作, 感谢原作者分享。
上一篇: 在项目中寻找代码的坏命名
推荐阅读
-
pymongo教程(2)聚合操作
-
white PHP_MySQL教程-第二天while循环与数据库操作第1/2页
-
Yii2 rbac权限控制操作步骤实例教程
-
Yii2 rbac权限控制操作步骤实例教程,yii2rbac_PHP教程
-
浅析Yii2中GridView常见操作,浅析yii2gridview_PHP教程
-
php文件目录操作实现程序(1/2)_PHP教程
-
MongoDB学习(黑马教程)-2-数据库MongoDB的导入文档和查询文档的操作
-
Yii2 rbac权限控制操作步骤实例教程,yii2rbac
-
Seeed STM32MP1开发板教程(2)GPIO的简单操作
-
使用PHP操作DB2 Express C的五种方法(1)_PHP教程