mongo排序,分页和聚合

一 MongoDB排序

准备数据

use my_test1

db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"a",sex:1,age:2})
db.c1.insert({_id:3,name:"b",sex:2,age:3})
db.c1.insert({_id:4,name:"c",sex:2,age:4})
db.c1.insert({_id:5,name:"d",sex:2,age:5})
db.c1.find()

mongo排序,分页和聚合

语法:

db.集合名.find().sort({域名: 1/-1})    // 1:升序  2:降序

二 MongoDB分页

语法:

db.集合名.find().sort().skip(数字).limit(数字)

说明: skip跳过指定数量的数据

limit 限制查询的数量

练习:

1、降序查询两条数据

db.c1.find().sort({age:-1}).skip(0).limit(2)

mongo排序,分页和聚合

2、降序查询 跳过两条并查询两条

db.c1.find().sort({age:-1}).skip(2).limit(2)

mongo排序,分页和聚合

总结

db.集合名.find()

sort(列:1/-1) 排序

skip(数字) 跳过指定数量

limit(数字) 限制查询的条数

count() 统计查询到的数据的数量

三、MongoDB聚合查询

语法:

db.集合名称.aggregate([ {管道: {表达式}}, ... ])

常用管道

$group 将集合中的文档分组,用于统计结果

$match 过滤数据,只要输出符合条件的文档

$sort 聚合数据进一步排序

$skip 跳过指定文档数

$limit 限制集合数据返回文档数

常用表达式

$sum 总和 $sum:1 同count表示统计

$avg 平均

$min最小值

$max 最大值

demo

测试数据

db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"a",sex:1,age:2})
db.c1.insert({_id:3,name:"b",sex:2,age:3})
db.c1.insert({_id:4,name:"c",sex:2,age:4})
db.c1.insert({_id:5,name:"d",sex:2,age:5})

1)统计男生,女生的总年龄

db.c1.aggregate([
    {
        $group:{
            _id: "$sex", // _id:分组的字段
            rs: {$sum: "$age"} // rs: 统计后数据的别名
        }
    }
])

2)统计男生,女生的总人数

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

3) 求学生总数和平均年龄

db.c1.aggregate([
    {
        $group:{
            _id:null,
            totalNum:{$sum:1},
            avgAge: {$avg:"$age"}
        }
    }
])

4)查询男生,女生人数并升序排列

db.c1.aggregate([
    {
        $group:{
            _id:"$sex",
            rs:{$sum:1}
        }
    },
    {
        $sort:{rs:1}
    }
])