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

$db=$m->getMongoClient();
$d=$db->mydb;
$c=$d->stu;
$depts=$c->distinct('dept');
foreach ($depts as $v){
echo $v.'<br>';
}

include_once 'mDB.class.php';
$m=new mDB();
$m->setDB('mydb');
$db=$m->getMongoClient();
$d=$db->mydb;
$c=$d->stu;
$depts=$c->distinct('dept');
foreach ($depts as $v){
echo $v;
echo '专业人数'.$c->find(['dept'=>$v])->count();
echo '<hr>';
}

<?php
header('content-type:text/html;charset=UTF-8');
//无密码直接登录mongodb
$m = new MongoClient('mongodb://localhost:27017');
$db = $m->selectDB('aaa');
$c1 = $db->student;
//$c1->insert(array("category" => "计算机", "name" => "张在",'age'=>33));
//$c1->insert(array("category" => "计算机", "name" => "李四",'age'=>25));
//$c1->insert(array("category" => "英语", "name" => "赵六",'age'=>30));
//$c1->insert(array("category" => "英语", "name" => "赵七",'age'=>40));
//$c1->insert(array("category" => "会计", "name" => "李勇",'age'=>10));
//$keys = array("category" => 1);
//$initial = array("items" => array());
//$reduce = "function (obj, prev) { prev.items.push(obj);}";
//$reduce = "function (obj, prev) { prev.items.push(obj.name);}";
//$reduce = "function (obj, prev) { prev.items.push(obj.name+obj.age);}";
//$g = $c1->group($keys, $initial, $reduce);
//echo json_encode($g['retval']);
//echo '<pre>';
//print_r($g);
//统计各专业人数
// $keys = array("category" => 1); //指定分类属性
// $initial = array("count" => 0);
// $reduce = "function (obj, prev) { prev.count++; }";
// $condition = array('condition' => array());//条件
// $g = $c1->group($keys, $initial, $reduce, $condition);
// var_dump($g);
//统计年龄大于等于25岁的总人数
// $keys=[];
// $initial = ['c'=>0];
// $reduce = 'function(obj,prev){prev.c++;}';
// $where = ['condition'=>['age'=>['$gte'=>25]]];
// $g = $c1->group($keys,$initial,$reduce,$where);
// var_dump($g);
//求出各专业学生年龄之和 select category,sum(age) from student group by category;
// $keys=['category'=>1];
// $initial = ['sum'=>0];
// $reduce = "function(obj,prev){prev['sum'] += obj.age; }";
// $g = $c1->group($keys,$initial,$reduce);
// var_dump($g);
//根据专业,来统计各专业的最大年龄
// $keys=['category'=>1];
// $initial = ['max'=>0];
// $reduce = "function(obj,prev){if(obj.age>prev['max']){prev['max']=obj.age;} }";
// $g = $c1->group($keys,$initial,$reduce);
// var_dump($g);
//根据专业分组,求出每个专业的人数,平均年龄,年龄总各
$keys=['category'=>1];
$initial = ['sum'=>0,'count'=>0,'avg'=>0];
$reduce = "function(obj,prev){prev['sum'] += obj.age;prev['count']++;prev['avg']=prev['sum']/prev['count']}";
$g = $c1->group($keys,$initial,$reduce);
var_dump($g);
$m->close();
include_once 'mDB.class.php';
$m=new mDB();
$m->setDB('mydb');
$db=$m->getMongoClient();
$d=$db->mydb;
$c=$d->stu;
$keys = ["dept" => 1]; //指定分类属性
$initial = array("count" => 0);
$reduce = "function (obj, prev) { prev.count++; }";
$condition = array('condition' => array());//条件
$g = $c->group($keys, $initial, $reduce, $condition);
echo '<pre>';
var_dump($g);

<?php
include_once 'mDB.class.php';
$m=new mDB();
$m->setDB('mydb');
$db=$m->getMongoClient();
$d=$db->mydb;
$c=$d->stu;
$keys = ["dept" => 1]; //指定分类属性
$initial = array("count" => 0);
$reduce = "function (obj, prev) { prev.count++; }";
$condition = array('condition' => array());//条件
$g = $c->group($keys, $initial, $reduce, $condition);
echo '<pre>';
var_dump($g);
echo '总人数'.$g['count'];
echo '<br>总专业'.$g['keys'].'个专业<br>';
foreach ($g['retval'] as $v){
echo $v['dept'].'人数'.$v['count'].'人';
}

<?php
include_once 'mDB.class.php';
$m=new mDB();
$m->setDB('mydb');
$db=$m->getMongoClient();
$d=$db->mydb;
$c=$d->stu;
//根据专业分组,求出每个专业的人数,平均年龄,年龄总各
$keys=['dept'=>1];
$initial = ['sum'=>0,'count'=>0,'avg'=>0,'max'=>0,'min'=>100];
$reduce ="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;}
}";
$g = $c->group($keys,$initial,$reduce);
echo '<pre>';
var_dump($g);
foreach ($g['retval'] as $v){
echo $v['dept'].'平均分'.$v['avg'].'最高分'.$v['max'].'最低分'.$v['min'].'各专业总分为'.$v['sum'].'<br>';
}

mongodb 分组查询的更多相关文章
- MongoDB分组查询,聚合查询,以及复杂查询
准备数据 from pymongo import MongoClient import datetime client=MongoClient('mongodb://localhost:27017') ...
- Mongodb 分组查询例子
db.tblCard.aggregate([ { $match: { "sNo": { " ...
- MongoDB之 分组查询
分组查询 可视化工具 https://robomongo.org pymongo from pymongo import MongoClient # 方式一: c = MongoClient(host ...
- Mongodb for C# 分组查询
#region 排序获取集合 static List<BsonDocument> GetPagerWithGroup(string connectionString, string dat ...
- mongodb使用mongoose分组查询
一个分组查询的例子: model.aggregate([{$match: ops}, {$unwind: '$details'}, {$sort: {create_at: -1}}, { $group ...
- MongoDB聚合查询
1.count:查询记录条数 db.user.count() 它也跟find一样可以有条件的 db.user.count({}) 2.distinct:用来找出给定键的所有不同的值 db.user.d ...
- Mongodb高级查询【二】
上一篇文章,写了mongodb常规操作,继续写入,本章主要讲高级查询,文本,聚集,大数据查询. Mongodb的查询语法是很多的,是NOSQL队伍中比较丰富的一个.当然有很多查询跟关系型查询无法相比. ...
- 使用c#对MongoDB进行查询(1)
1.BsonDocument对象 在MongoDB.Bson命名空间下存在一个BsonDocument类,它是MongoDB的文档对象,代表着MongoDB中不规则数据一条条实体模型.可以使用Bson ...
- BBS--功能4:个人站点页面设计(ORM跨表与分组查询)
查询: 日期归档查询 1 date_format ============date,time,datetime=========== create table t_mul_new(d date,t t ...
随机推荐
- Mysql与Oracle区别
1.Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2.Oracle支持大并发,大访问量 ...
- 转 MySQL 数据备份与还原
MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html 一.数据备份 1.使用mysqldump命令备份 mysqldum ...
- C#实现略缩图
public class GenerateThumbnail { private Image imageFrom; /// <summary> /// 源图的路径(含文件名及扩展名 /// ...
- http load 的使用以及参数解释
http load 的使用以及参数解释 1.参数含义 参数 全称 含义 -p -parallel 并发的用户进程数.-f -fetches ...
- C#中Validating和Validated事件
http://blog.sina.com.cn/s/blog_6116673a0100fpeo.html 待解读
- How Garbage Collection Really Works
Java Memory Management, with its built-in garbage collection, is one of the language's finest achiev ...
- win下安装oracle的步骤
- caffe网络模型各层详解(一)
一:数据层及参数 caffe层次有许多类型,比如Data,Covolution,Pooling,层次之间的数据流动是以blobs的方式进行 首先,我们介绍数据层: 数据层是每个模型的最底层,是模型的入 ...
- 【转】C#多线程Lock使用
一.Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行, ...
- Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)
用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...