aggregate() 方法
MongoDB中使用**aggregate()**方法进行聚合处理,例如统计平均值,求和等操作,并返回最后的计算结果。
语法
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
相当于SQL语句中的group By
db.collection.aggregate([
{
$match : {< query >},
}
{
$group: {< fieldl >: < field2 >}
}
])
Query设置统计查询的条件,类似于SQL的where。field1为分类字段,要求使用 _id 名表示分类字段。field2为包含各种统计操作符的数字类型字段。例如 $sum , $avg , $min等。
db.collection.aggregate([
{
$group:{
"_id" : "$name",
"total":{
$sum : 1
}
}
}
])
相当于SQL中 :
select name as _id , count(*) as total from tableName group by name
常用聚合表达式
管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
常用聚合操作
聚合实例
新建测试数据:
db.lottery_member.insert({
"lotteryDetailsId":"2020102010","unionId":"111","name":"jz测试1","corpId":"jzCorp","type":1,"isPrize":true,"phone":"12345",
"receiveTime": ISODate("2020-10-20T12:01:00Z"),"isDel":0})
db.lottery_member.insert({
"lotteryDetailsId":"2020102010","unionId":"111","name":"jz测试1","corpId":"jzCorp","type":1,"isPrize":true,"phone":"12345",
"receiveTime": ISODate("2020-10-20T12:02:00Z"),"isDel":0})
db.lottery_member.insert({
"lotteryDetailsId":"2020102010","unionId":"111","name":"jz测试1","corpId":"jzCorp","type":1,"isPrize":true,"phone":"12345",
"receiveTime": ISODate("2020-10-20T12:03:00Z")