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 ...
随机推荐
- 解决ideviceinstaller未安装的问题
在Mac上,使用Appium时提示: Could not initialize ideviceinstaller; make sure it is installed and works on you ...
- FileSystem.DeleteDirectory遇到"无法删除 文件:无法读取源文件或磁盘"
Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(fileFolder, UIOption.AllDialogs, RecycleOpti ...
- Weblogic是瓦特?和JVM是瓦特关系?
所谓固定内存60M是瓦特? 以下内容是个瓦特? “总内存大小=堆内存+非堆内存1200m:为堆内存大小,如果不指定后者参数则有最大数限制,网上很多文章认为这就是JVM内存,-Xmx为设置最大堆内存60 ...
- pstools使用教程
pstools是sysinternals开发的一个功能强大的nt/2k远程管理工具包. 官方网址为http://www.sysinternals.com/ 下载地址为http://www.sysint ...
- AFNetwork ATS 网络层改造
最近一直做项目的ATS改造,期间遇到了种种问题,各种坑都记录下来, 比如iOS版本.afnetwork版本.证书(是否为自签证书).域名验证.TLS版本等等,我们项目更复杂,还使用了域名到IP映射的路 ...
- c++中处理输入输出的方法
============ 怎么处理一行空格中的逗号, ,,, ,,, ,,, c,c,d,d 使用c++的方法,可以这么处理: #include <sstream> #include< ...
- Redis应用配置项说明
近期整理了下项目中Redis配置参数,以便学习备用~ #指定内存大小,格式为1k 1GB 1M,单位不区分大小写 # 1k => 1000 bytes # 1kb => 1024 byt ...
- Software Development Principle
Every great piece of software begins with customer's big idea. As a professional softeware developer ...
- 动画--问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题。
http://www.bkjia.com/Androidjc/929473.html: 问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题., 问题:我有一个 ...
- tomcat结合nginx使用小结
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...