MongoDBaggregate聚合语法
MongoDB的聚合管道将MongoDB⽂档在⼀个管道处理完毕后将结果传递给下⼀个管道处理,
下⼀个管道接收到的字段来源上⼀个管道。
语法⽰例:
db.school.aggregate(
西式早餐[托福考试时间
{$match:{time:{$gt:1513612800}}},
研究生学位英语考试{$group:{_id:{insituteName:"$institute",class:"$name"},count:{$sum:1}}},
{$sort:{count:-1}},
{$limit:10}]
)
汉英在线翻译
montenegro注:
1. $match 表⽰查询条件
2. $group 表⽰分组,_id固定写法,
如果按照多个字段分组,则字段必须都在_id对象中,可以取别名,例如上⾯⽰例,输出结果为:
{ "_id" : { "insituteName" : "数学系",class: "⼀班"}, "count" : 200 }
{ "_id" : { "insituteName" : "英语系",class: "⼆班" }, "count" : 201 }
如果按照⼀个字段分组,则可以写为{$group:{_id:"$institute",count:{$sum:1}}},此时,查询结果为:
{ "_id" : "数学系", "count" : 1000 }
{ "_id" : "英语系", "count" : 800 }
若没有分组字段,则{$group:{_id:null,count:{$sum:1}}}mun
3. $sort 排序,1——正序,-1——倒序furious
4. $limit 限制输出数据条数
托福阅读算分5. count:{$sum:1},1表⽰统计查询结果数量,如果想统计time字段和则使⽤ count:{$sum:"$time"}。
聚合函数有:min,max,sum,avg
6. $project 表⽰选择显⽰的字段,1——显⽰,0——不显⽰,如下⽰例:
db.school.aggregate([{$project:{insituteName:1,"time:1,_id:0}},{$match:{"time:{$gt:1513612800}}},{$sort:{"time:-1}}, {$limit:10}])
输出:
{ "insituteName" : "数学系", "time" : 1521392371 }
{ "name" : "英语系", "time" : 1521392370 }
家务的英文
7. $skip在跳过指定数量的⽂档,并返回余下的⽂档,例如,下⾯跳过前5条⽂档,显⽰第6到第10条:
db.school.aggregate([{$project:{time:1,name:1,_id:0}},{$match:{time:{$gt:1513612800}}},{$group:{_id:
{className:"$name"},count:{$sum:1}}},{$sort:{count:-1}},{$limit:10},{$skip:5}]
注释:
$project先筛选出所有⽂档的time和name两个字段,
$match然后筛选出时间⼤于1513612800的⽂档,
$group按照name字段分组,重命名为className,
$sum统计服务条件的⽂档数量,
$sort按照数量count字段倒序排序,
mie
$limit限制⼀共输出前10条⽂档;
$skip跳过前5条⽂档,输出第6到第10条⽂档。
区别:
复杂⽰例3:
db.page_status_projects.aggregate([{$match:{clock:{$gt:1513612800}}},{$project:{clock:{"$divide":['$clock',3600]},name:1}}, {$group:{_id:{projectName:"$name"},time:{$sum:"$clock"},count:{$sum:1}}},{$sort:{count:-1}},{$limit:10}])