//对成绩集合做聚合,分组,管道操作
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"}}}])