• mongodb 分组查询


    数据的保存
    1. include_once 'mDB.class.php';
    2. $m=new mDB();
    3. $m->setDB('mydb');
    4. // $m->save('stu',['dept'=>'财务','name'=>'张三','age'=>73]);
    5. // $m->save('stu',['dept'=>'计算机','name'=>'张四','age'=>53]);
    6. // $m->save('stu',['dept'=>'计算机','name'=>'张五','age'=>23]);
    7. // $m->save('stu',['dept'=>'财务','name'=>'张六','age'=>93]);
    8. // $m->save('stu',['dept'=>'计算机','name'=>'张七','age'=>83]);
    9. // $m->save('stu',['dept'=>'法学','name'=>'张八','age'=>53]);
    查询出所有的专业
    1. $db=$m->getMongoClient();
    2. $d=$db->mydb;
    3. $c=$d->stu;
    4. // echo $c->find(['dept'=>'计算机'])->count();//返回计算机专业有几人
    5. $currsor=$c->find([],['_id'=>0,'dept'=>1]);
    6. foreach ($currsor as $v){
    7. echo $v['dept'].'<br>';
    8. }

    消除重复取出各个专业的名字distinct
    1. $db=$m->getMongoClient();
    2. $d=$db->mydb;
    3. $c=$d->stu;
    4. $depts=$c->distinct('dept');
    5. foreach ($depts as $v){
    6. echo $v.'<br>';
    7. }

    统计各个专业的人数
    1. include_once 'mDB.class.php';
    2. $m=new mDB();
    3. $m->setDB('mydb');
    4. $db=$m->getMongoClient();
    5. $d=$db->mydb;
    6. $c=$d->stu;
    7. $depts=$c->distinct('dept');
    8. foreach ($depts as $v){
    9. echo $v;
    10. echo '专业人数'.$c->find(['dept'=>$v])->count();
    11. echo '<hr>';
    12. }

    分组查询的所有代码
    1. <?php
    2. header('content-type:text/html;charset=UTF-8');
    3. //无密码直接登录mongodb
    4. $m = new MongoClient('mongodb://localhost:27017');
    5. $db = $m->selectDB('aaa');
    6. $c1 = $db->student;
    7. //$c1->insert(array("category" => "计算机", "name" => "张在",'age'=>33));
    8. //$c1->insert(array("category" => "计算机", "name" => "李四",'age'=>25));
    9. //$c1->insert(array("category" => "英语", "name" => "赵六",'age'=>30));
    10. //$c1->insert(array("category" => "英语", "name" => "赵七",'age'=>40));
    11. //$c1->insert(array("category" => "会计", "name" => "李勇",'age'=>10));
    12. //$keys = array("category" => 1);
    13. //$initial = array("items" => array());
    14. //$reduce = "function (obj, prev) { prev.items.push(obj);}";
    15. //$reduce = "function (obj, prev) { prev.items.push(obj.name);}";
    16. //$reduce = "function (obj, prev) { prev.items.push(obj.name+obj.age);}";
    17. //$g = $c1->group($keys, $initial, $reduce);
    18. //echo json_encode($g['retval']);
    19. //echo '<pre>';
    20. //print_r($g);
    21. //统计各专业人数
    22. // $keys = array("category" => 1); //指定分类属性
    23. // $initial = array("count" => 0);
    24. // $reduce = "function (obj, prev) { prev.count++; }";
    25. // $condition = array('condition' => array());//条件
    26. // $g = $c1->group($keys, $initial, $reduce, $condition);
    27. // var_dump($g);
    28. //统计年龄大于等于25岁的总人数
    29. // $keys=[];
    30. // $initial = ['c'=>0];
    31. // $reduce = 'function(obj,prev){prev.c++;}';
    32. // $where = ['condition'=>['age'=>['$gte'=>25]]];
    33. // $g = $c1->group($keys,$initial,$reduce,$where);
    34. // var_dump($g);
    35. //求出各专业学生年龄之和 select category,sum(age) from student group by category;
    36. // $keys=['category'=>1];
    37. // $initial = ['sum'=>0];
    38. // $reduce = "function(obj,prev){prev['sum'] += obj.age; }";
    39. // $g = $c1->group($keys,$initial,$reduce);
    40. // var_dump($g);
    41. //根据专业,来统计各专业的最大年龄
    42. // $keys=['category'=>1];
    43. // $initial = ['max'=>0];
    44. // $reduce = "function(obj,prev){if(obj.age>prev['max']){prev['max']=obj.age;} }";
    45. // $g = $c1->group($keys,$initial,$reduce);
    46. // var_dump($g);
    47. //根据专业分组,求出每个专业的人数,平均年龄,年龄总各
    48. $keys=['category'=>1];
    49. $initial = ['sum'=>0,'count'=>0,'avg'=>0];
    50. $reduce = "function(obj,prev){prev['sum'] += obj.age;prev['count']++;prev['avg']=prev['sum']/prev['count']}";
    51. $g = $c1->group($keys,$initial,$reduce);
    52. var_dump($g);
    53. $m->close();
    查询出所有的信息
    1. include_once 'mDB.class.php';
    2. $m=new mDB();
    3. $m->setDB('mydb');
    4. $db=$m->getMongoClient();
    5. $d=$db->mydb;
    6. $c=$d->stu;
    7. $keys = ["dept" => 1]; //指定分类属性
    8. $initial = array("count" => 0);
    9. $reduce = "function (obj, prev) { prev.count++; }";
    10. $condition = array('condition' => array());//条件
    11. $g = $c->group($keys, $initial, $reduce, $condition);
    12. echo '<pre>';
    13. var_dump($g);

    统计出所有的信息
    $reduce = "function (obj, prev) { prev.count++; }";此句为程序里面的死命令
    1. <?php
    2. include_once 'mDB.class.php';
    3. $m=new mDB();
    4. $m->setDB('mydb');
    5. $db=$m->getMongoClient();
    6. $d=$db->mydb;
    7. $c=$d->stu;
    8. $keys = ["dept" => 1]; //指定分类属性
    9. $initial = array("count" => 0);
    10. $reduce = "function (obj, prev) { prev.count++; }";
    11. $condition = array('condition' => array());//条件
    12. $g = $c->group($keys, $initial, $reduce, $condition);
    13. echo '<pre>';
    14. var_dump($g);
    15. echo '总人数'.$g['count'];
    16. echo '<br>总专业'.$g['keys'].'个专业<br>';
    17. foreach ($g['retval'] as $v){
    18. echo $v['dept'].'人数'.$v['count'].'人';
    19. }

    "function(obj,prev){
        prev['sum'] += obj.age;
        prev['count']++;
        prev['avg']=prev['sum']/prev['count'];
       if(obj.age>prev['max']){prev['max']=obj.age;}
        if(obj.age<prev['min']){prev['min']=obj.age;}
    }";  
    求出平均分,最高分,最低分,各专业的总分
    1. <?php
    2. include_once 'mDB.class.php';
    3. $m=new mDB();
    4. $m->setDB('mydb');
    5. $db=$m->getMongoClient();
    6. $d=$db->mydb;
    7. $c=$d->stu;
    8. //根据专业分组,求出每个专业的人数,平均年龄,年龄总各
    9. $keys=['dept'=>1];
    10. $initial = ['sum'=>0,'count'=>0,'avg'=>0,'max'=>0,'min'=>100];
    11. $reduce ="function(obj,prev){
    12. prev['sum'] += obj.age;
    13. prev['count']++;
    14. prev['avg']=prev['sum']/prev['count'];
    15. if(obj.age>prev['max']){prev['max']=obj.age;}
    16. if(obj.age<prev['min']){prev['min']=obj.age;}
    17. }";
    18. $g = $c->group($keys,$initial,$reduce);
    19. echo '<pre>';
    20. var_dump($g);
    21. foreach ($g['retval'] as $v){
    22. echo $v['dept'].'平均分'.$v['avg'].'最高分'.$v['max'].'最低分'.$v['min'].'各专业总分为'.$v['sum'].'<br>';
    23. }





  • 相关阅读:
    拳击游戏(虚函数应用)
    虚函数的使用
    继承中的二义性归属问题
    继承的作用以及在子类中初始化所有数据的方法
    Exploring ES2016 Decorators
    Storage information for PWA application
    浏览器中常见网络协议介绍
    vuex所有核心概念完整解析State Getters Mutations Actions
    搭建一个webpack微服务器
    nodeJS接入微信公众平台开发
  • 原文地址:https://www.cnblogs.com/lsr111/p/4615033.html
Copyright © 2020-2023  润新知