zoukankan      html  css  js  c++  java
  • aggregate运用

    测试环境:192.168.1.55

    mongo 192.168.1.55:30001
    show dbs
    use gwgps

    测试目标,求出两个班的总数,人数,平均分数等。

    1. 数据准备
    db.person1.insert({'class':1,'name':'n1',age:5,score:90,nation:'汉'})
    db.person1.insert({'class':1,'name':'n2',age:6,score:92,nation:'汉'})
    db.person1.insert({'class':1,'name':'n3',age:5,score:92,nation:'苗'})
    db.person1.insert({'class':1,'name':'n4',age:8,score:96,nation:'藏'})
    db.person1.insert({'class':1,'name':'n5',age:8,score:98,nation:'汉'})
    db.person1.insert({'class':1,'name':'n6',age:9,score:98,nation:'汉'})
    db.person1.insert({'class':1,'name':'n7',age:4,score:91,nation:'藏'})
    db.person1.insert({'class':1,'name':'n8',age:8,score:96,nation:'苗'})
    db.person1.insert({'class':2,'name':'n9',age:9,score:95,nation:'苗'})
    db.person1.insert({'class':2,'name':'n10',age:9,score:96,nation:'藏'})
    db.person1.insert({'class':2,'name':'n11',age:9,score:92,nation:'苗'})
    db.person1.insert({'class':2,'name':'n12',age:8,score:91,nation:'汉'})
    db.person1.insert({'class':2,'name':'n13',age:7,score:99,nation:'汉'})
    db.person1.insert({'class':2,'name':'n14',age:7,score:98,nation:'汉'})
    db.person1.insert({'class':2,'name':'n15',age:2,score:99,nation:'内蒙'})

    2. 查询所有人数
    (_id:为分组字段,如果不进行分组,则用null,如果有,填写分组字段)
    db.person1.aggregate( [ {
    $group: {
    _id: null,
    count: { $sum: 1 }
    }
    }
    ] )

    结果:{ "_id" : null, "count" : 15 }

    3.查询总分
    db.person1.aggregate( [ {
    $group: {
    _id: null,
    total: { $sum: "$score" }
    }
    }
    ] )
    结果:{ "_id" : null, "total" : 1423 }

    4.根据班级分组,求出每个班的总分,并对分数进行排序
    (注:分组可以一个字段,也可以多个字段)
    db.person1.aggregate( [ {
    $group: {
    _id: "$class",
    total: { $sum: "$score" }
    }
    }, { $sort: { total: 1 } }
    ] )

    结果: { "_id" : 2, "total" : 670 } { "_id" : 1, "total" : 753 }

    5.对班级和年龄分组,求出不同班级,年龄层次的总分,并对分数排序
    db.person1.aggregate( [ {
    $group: {
    _id: {
    class: "$class",
    age:"$age" 
    },
    total: { $sum: "$score" }
    }
    }
    ] )
    结果: { "_id" : { "class" : 2, "age" : 8 }, "total" : 91 } { "_id" : { "class" : 2, "age" : 2 }, "total" : 99 } { "_id" : { "class" : 1, "age" : 4 }, "total" : 91 } { "_id" : { "class" : 1, "age" : 9 }, "total" : 98 } { "_id" : { "class" : 2, "age" : 9 }, "total" : 283 } { "_id" : { "class" : 1, "age" : 8 }, "total" : 290 } { "_id" : { "class" : 2, "age" : 7 }, "total" : 197 } { "_id" : { "class" : 1, "age" : 6 }, "total" : 92 } { "_id" : { "class" : 1, "age" : 5 }, "total" : 182 }

    6.首先按照班级分组,然后求出人数大于7的班级名和学生具体人数
    db.person1.aggregate( [ {
    $group: {
    _id: "$class",
    count: { $sum: 1 }
    }
    }, { $match: { count: { $gt: 7 } } }
    ] )
    结果: { "_id" : 1, "count" : 8 }

    7.求出经过过滤某个指定条件(名族:汉)后的结果数据,对结果数据进行分组计算
    db.person1.aggregate( [ { $match: { nation: '汉' } }, {
    $group: {
    _id: "$class",
    total: { $sum: "$score" }
    }
    }
    ] )
    结果: { "_id" : 2, "total" : 288 } { "_id" : 1, "total" : 378 }

    注:其他功能待定。

  • 相关阅读:
    JZOI 4020 Revolution
    JZOJ 4018 Magic
    JZOJ 4017 逃跑
    JZOJ 4016 圈地为王
    JZOJ 4015 数列
    JZOJ 3960 鸡腿の出行
    BZOJ 5005 & JZOI 3959 鸡腿の乒乓
    GCJ2009B&JZOJ 4033 Min Perimeter
    jzoj 3948 Hanoi 塔
    [纯符][纯粹的无聊] 神奇的递推式
  • 原文地址:https://www.cnblogs.com/myibm/p/5939366.html
Copyright © 2011-2022 走看看