-
最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得。。
别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写一下我的总结。
基础知识
请大家自行查找更多,以下是关键文档。
操作符介绍:
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$limit:限制结果数量
$skip:忽略结果的数量
$sort:按照给定的字段排序结果
$group:按照给定表达式组合结果
$unwind:分割嵌入数组到自己顶层文件
文档:MongoDB 官方aggregate说明。
相关使用:
db.collection.aggregate([array]);
array可是是任何一个或多个操作符。
group和match的用法,使用过sqlserver,group的用法很好理解,根据指定列进行分组统计,可以统计分组的数量,也能统计分组中的和或者平均值等。
group之前的match,是对源数据进行查询,group之后的match是对group之后的数据进行筛选;
同理,sort,skip,limit也是同样的原理;
1.
1
{_id:
1
,name:
"a"
,status:
1
,num:
1
}
2.
2
{_id:
2
,name:
"a"
,status:
0
,num:
2
}
3.
3
{_id:
3
,name:
"b"
,status:
1
,num:
3
}
4.
4
{_id:
4
,name:
"c"
,status:
1
,num:
4
}
5.
5
{_id:
5
,name:
"d"
,status:
1
,num:
5
}
以下是示例:
应用一:统计name的数量和总数;
db.collection.aggregate([
{$group:{_id:"$name",count:{$sum:1},total:{$sum:"$num"}}
]);
应用二:统计status=1的name的数量;
db.collection.aggregate([
{$match:{status:1}},
{$group:{_id:"$name",count:{$sum:1}}}
]);
应用三:统计name的数量,并且数量为小于2的;
db.collection.aggregate([
{$group:{_id:"$name",count:{$sum:1}},
{$match:{count:{$lt:2}}}
]);
应用四:统计stauts=1的name的数量,并且数量为1的;
db.collection.aggregate([
{$match:{status:1}},
{$group:{_id:"$name",count:{$sum:1}}},
{$match:{count:1}}
]);
多列group,根据name和status进行多列
db.collection.aggregate([
{$group:{_id:{name:"$name",st:"$status"},count:{$sum:1}}}
]);
$project该操作符很简单,
db.collection.aggregate([
{$project:{name:1,status:1}}
]);
结果是,只有_id,name,status三个字段的表数据,相当于sql表达式 select _id,name,status from collection
$unwind
这个操作符可以将一个数组的文档拆分为多条文档,在特殊条件下有用,本人暂没有进行过多的研究。
以上基本就可以实现大部分统计了,group前条件,group后条件,是重点。
- 浏览: 145281 次
- 性别:
- 来自: 北京
相关推荐
MongoDB的聚合操作可以使用命令行、驱动程序或MongoDB Shell中的aggregate()函数来执行。在聚合函数中,可以链式调用多个阶段操作符,形成一个完整的聚合管道。 值得一提的是,张善友在其博客中对MongoDB聚合管道...
最近一直在用mongodb,有时候会需要用到...MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示: db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 实例 集合中的数据如下: { _
在 MongoDB 2.2 版本之后引入了聚合框架,这为开发者提供了更高效的数据处理方式。 #### 聚合管道(Pipeline)概念 聚合管道由多个阶段(stages)组成,每个阶段针对输入文档执行特定的操作,并将处理后的结果传递...
在MongoDB中,`db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)`命令用于对特定集合执行一系列聚合管道操作。每个操作(pipe)通常接收上一步的输出作为输入,并产生新的输出,直到最后一个操作返回最终结果。 ...
db.COLLECTION_NAME.aggregate() 方法用来构建和使用聚合管道,下图是官网给的实例,可以看出来聚合管道的用法还是比较简单的。 2. MongoDB Aggregation 管道操作符与表达式 常用的管道操作符有以下这些: ...
在PHP中,MongoDB是一个非常流行的NoSQL数据库系统,它提供了强大的聚合框架(aggregate)用于数据处理和分析。本文将详细介绍如何在PHP中使用MongoDB的aggregate功能,并通过`main.php`示例代码来演示其具体用法。 ...
MongoDB 中的 `aggregate` 方法是一种用于处理数据(聚合数据)的方法,它可以进行复杂的汇总操作。`group` 是 `aggregate` 方法中的一个阶段,它可以根据指定的字段对文档进行分组,并且可以计算每个分组的统计信息...
在MongoDB中,聚合管道通过`db.COLLECTION_NAME.aggregate([...])`方法来实现。 一、MongoDB聚合管道(Aggregation Pipeline) 聚合管道由多个阶段组成,每个阶段都会接收上一阶段处理后的结果,并对其进行进一步的...
总结来说,这个示例展示了如何在Node.js中使用MongoDB的聚合框架`aggregate`进行级联查询,包括匹配、分组、排序和限制结果,以及使用EventProxy进行并发控制。这种方法在处理关联数据和复杂数据分析时非常有用,...
除了这些简单的聚合函数外,MongoDB还提供了一个更强大的聚合框架——`aggregate`方法,它允许用户通过一系列的阶段(pipeline stages)进行数据处理,如`$match`、`$group`、`$sort`、`$project`等,实现更复杂的...
关于mongodb的高级操作,包括聚合、主从复制、分片、备份与恢复、MR。 一、聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg() 语法: db.集合名称.aggregate([{管道:{表达式}}]) 管道:...
Aggregate是Mongodb中的一种数据聚合方式,通过使用聚合管道来处理数据,从而实现数据的过滤、分组、排序等操作。 首先,我们需要了解Mongodb的聚合管道的基本概念。聚合管道是指一系列的数据处理阶段,每个阶段都...
meteor-aggregate, 对 Meteor的适当的MongoDB聚合支持 meteorhacks:aggregate为 Meteor 添加适当聚合支持的简单软件包。 这个包在 Mongo.Collection 实例上公开了 .aggregate 方法。这只在服务器端工作,没有...
JAVA 中使用 MongoDB 的聚合查询方式有多种,包括使用 BasicDBObject 和 DBObject 两种方式。通过本文的介绍,读者可以了解聚合查询的基础知识和实现方式,从而更好地使用 MongoDB 实现复杂的数据分析和处理。
本文将介绍 MongoDB 中聚合函数的 Java 处理示例详解,通过示例代码介绍了非常详细,对大家学习或者使用 MongoDB 具有一定的参考学习价值。 MongoDB 中聚合函数的基本概念 在 MongoDB 中,聚合函数是一个 pipeline...
在Java中,我们可以使用Spring Data MongoDB的API来构建并执行这个聚合管道。以下是一个具体的Java代码示例: ```java import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; import ...
这个任务在MongoDB中可以通过聚合框架(`aggregate`)来实现。 首先,我们了解数据记录的格式。记录包含了多个字段,如 `_id`、`_class`、`resourceUrl`、`refererDomain`、`resourceType`、`ip`、`createTime` 和 `...