mongo文档聚合

//对成绩集合做聚合,分组,管道操作

db.student.aggregate( [

  {$lookup:{from: "score",localField: "_id",foreignField: "stuId",as: "results"}}, // 执行1,结果给2

  {$match:{"results.score": {$gte: 70}}}, // 执行2,结果给3

  {$sort: {"_id": -1}}, //按照_id字段做降序排序,1:是升序。 // 执行3,依次...

  {$skip: 2}, //指定跳过个document

  {$limit: 1} //指定取几个document

] )

---------------------------------------------------------------------------------------------------------------------------------

//分组操作[1],类似于:select sex,count(*) from user group by sex;

db.user.aggregate([{$group: {"_id": "$sex", "total": {$sum: 1}}}])

//分组操作[2],类似于:select sex,sum(age) from user group by sex;

db.user.aggregate([{$group: {"_id": "$sex", "total": {$sum: "$age"}}}])

//分组操作[3],给分组后的结果集后添加一个数组,数组组成是分组后name组成的数组

db.user.aggregate([{$group: {"_id": "$sex", "names": {$push: "$name"}}}])

db.user.aggregate([{$group: {"_id": "$sex", "hobbys": {$push: "$hobby.name"}}}])

//使用$addToSet添加数组,但是不常见副本,和$push是一样的效果

db.user.aggregate([{$group: {"_id": "$sex", "names": {$addToSet: "$name"}}}])

//使用$first:根据资源文档的排序获取第一个文档数据。

db.user.aggregate([{$group: {"_id": "$sex", "names": {$first: "$name"}}}])

//使用$last:根据资源文档的排序获取最后一个文档数据

db.user.aggregate([{$group: {"_id": "$sex", "names": {$last: "$name"}}}])

上一篇:Flink SQL项目实录


下一篇:MongoDB快速入门教程 (3.3)