mongodb aggregate 聚合操作
2016-03-08 13:53
423 查看
何为aggregate聚合操作?
mongodb的聚合操作,接受一个名为pipeline的参数和一个可选参数。pipeline可以理解为流水线,一条流水线上可以有一个或多个工序。所以,mongodb的一次聚合操作就是对一个表进行多个工序的加工,其中的每个工序都可以修改、增加、删除文档,最终产出我们需要的数据集合。
aggregate示例
进入mongodb命令行,我们有一个名为TestOrder的表,表中的记录如下> db.TestOrder.find() { "_id" : ObjectId("56dd4b33186888da5d8b4567"), "cust_id" : "A123", "amount" : 502, "status" : "A" } { "_id" : ObjectId("56dd4b33186888da5d8b4568"), "cust_id" : "A123", "amount" : 500, "status" : "B" } { "_id" : ObjectId("56dd4b33186888da5d8b4569"), "cust_id" : "A123", "amount" : 500, "status" : "C" } { "_id" : ObjectId("56dd4b33186888da5d8b456a"), "cust_id" : "A123", "amount" : 500, "status" : "D" } { "_id" : ObjectId("56dd4dad186888c36f8b4567"), "cust_id" : "A123", "amount" : 500, "status" : "A" } { "_id" : ObjectId("56dd4dad186888c36f8b4568"), "cust_id" : "A123", "amount" : 500, "status" : "B" } { "_id" : ObjectId("56dd4dad186888c36f8b4569"), "cust_id" : "A123", "amount" : 500, "status" : "C" } { "_id" : ObjectId("56dd4dad186888c36f8b456a"), "cust_id" : "A123", "amount" : 500, "status" : "D" }
如果需要按status字段统计amount总额,并且只统计status为A、B或C的记录,可以用聚合操作进行统计。
第一步:从TestOrder中找出status为A、B或C的记录。这是流水线的第一道工序,表达式如下
{ $match: { status: { $in: ['A','B','C'] } } }
第二步:按status统计amount总额。这是流水线的第二道工序,表达式如下
{ $group: { _id: '$status', totalAmount: { $sum: '$amount' } } }
最终的聚合操作命令,以及结果
> db.TestOrder.aggregate([{ $match: { status: { $in: ['A','B','C'] } } }, { $group: { _id: '$status', totalAmount: { $sum: '$amount' } } }]) { "result" : [ { "_id" : "C", "totalAmount" : 1000 }, { "_id" : "B", "totalAmount" : 1000 }, { "_id" : "A", "totalAmount" : 1002 } ], "ok" : 1 }
用流水线来类比mongodb的聚合操作是比较形象的。
聚合操作的性能
聚合操作是对一个mongodb表进行的操作,最坏的情况下需要全表扫描,如果表的记录很多,速度就很慢了,也会消耗更多的内存。为了提高性能,最好的策略是将筛选“工序”放到最前面,尽早排除不满足条件的记录,降低后面工序的工作量。如果最前面的筛选工序能够利用上索引,可加快整个操作的速度。
相关文章推荐
- mongodb学习(二)
- mongodb常用命令
- mongodb 中data lock解决方法
- mongodb的shell执行脚本-js脚本
- mongodb 速成笔记
- Mongodb-索引
- Mongodb 在windwos下安装
- mongodb权限
- nodejs学习笔记二——链接mongodb
- mongodb 安装
- MongoDB基本语法详解
- 浅谈如何用Java操作MongoDB
- MongoDB利用正则表达式查询(pymongo实现)
- java操作mongodb数据库
- mongodb shell 脚本
- MongoDB-OrderTransactions
- mongodb学习(一)
- 搭建mongodb热备集群 和 c#驱动
- MongoDB只查询数据第1个元素
- mongoDB 索引