zoukankan      html  css  js  c++  java
  • 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()

    clipboard

    语法:

    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)

    clipboard

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

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

    clipboard

    总结

    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}
        }
    ])
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/houchen/p/13946774.html
Copyright © 2011-2022 走看看