MongoDB学习笔记之分组(group)使用示例


// 准备测试数据
db.user.drop();
for(var i=10; i< 100; i++) {
  db.user.insert({
    name:"user" + i, 
    age : Math.floor(Math.random()*10)+ 20, 
    sex : Math.floor(Math.random()*3)%2 ==0 ? 'M' : 'F',
    chinese : Math.floor(Math.random()*50)+50,
    math : Math.floor(Math.random()*50)+50,
    english : Math.floor(Math.random()*50)+50,
    class : "C" + i%5
  })
}

// group函数
// 按照class进行分组,显示每个class中的用户姓名和性别
db.user.group({
  key: {"class": true},
  initial: {"person": []},
  reduce: function(cur, prev) {
    prev.person.push({name: cur.name, sex: cur.sex, age: cur.age});
  }
});

// 对age>25的用户,按照class进行分组,显示每个class中的用户姓名和性别,并统计每组的人数
db.user.group({
  key: {"class": true},
  initial: {"person": []},
  reduce: function(doc, out){
    out.person.push({name: doc.name, sex: doc.sex, age: doc.age});
  },
  finalize: function(out){
    out.count = out.person.length;
  },
  condition: {"age": {$gt: 25}}
})

// 分组计算每个class中,chinese最大值和最小值
db.user.group({
  key: {"class": true},
  initial: {"chinese_min": 0, "chinese_max":0 },
  reduce: function(doc, out){
    out.chinese_min = doc.chinese;
    out.chinese_min = doc.chinese;

    out.chinese_min = Math.min(out.chinese_min, doc.chinese);
    out.chinese_max = Math.max(out.chinese_max, doc.chinese)
  },
})

// 利用分组,计算每个总成绩和成绩平均值
db.user.group({
  key: {"_id" : true},
  initial: {name:"", total: 0, avg: 0},
  reduce: function(doc, out){
    out.name = doc.name;
    out.total = doc.chinese + doc.math + doc.english;
    out.avg = Math.floor(out.total / 3);
  }
})

group参数选项:

1.key: 这个就是分组的key
2.initial: 每组都分享一个初始化函数,特别注意:是每一组initial函数。
3.reduce: 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象。有多少个文档, $reduce就会调用多少次。
4.condition: 这个就是过滤条件。
5.finalize: 这是个函数,每一组文档执行完后,多会触发此方法。



相关阅读:
win7 adsl连接设置方法 win7 adsl自动连接设置教程
原生JS实现旋转木马式图片轮播插件
Android中findViewById获取控件返回为空问题怎么解决
C++设计模式之代理模式
Javascript实现视频轮播在pc端与移动端均可
PHP mysqli 增强 批量执行sql 语句的实现代码
jQuery+HTML5美女瀑布流布局实现方法
win7系统打开IE浏览器提示“禁用的加载项,网页内容无法显示”的故障分析及解决方法
MongoDB使用指南--基本操作
C++输入输出注意事项总结
继续使用Win10过期版本(build 10240之前的版本) 或有什么后果?
js字符串截取函数substr substring slice使用对比
Android非XML形式动态生成、调用页面的方法
自动检测数字替换非数字的正则表达式
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 奇妙的旅行作文600字 唐山大地震电影影评 园林设计,园林概预算,绘图员-格 生活的负担——读《蝜蝂传》 体育部新学期工作计划 忽然明白,如果我不爱你,我就不会思念你 企业经营与政府行为的关系 [图文]我爱大海 党组书记谈作风建设 初中初二作文800字:家有小书虫 小学五年级作文800字:无法掩饰的幸福 写作技巧与心得117条 地方铁路公司年度工作总结 自述作文600字 送沙门弘景道俊玄奘还荆州应制 小学六年级作文900字:永远的葱郁永远的中国 四五流年还在不在 回到最初的自己 读《穿越天空的心灵》有感作文500字 普通的一次购物 给眼镜的一封信 这个夏季,我是你的阳光 财务工作检查自查报告 青少年成长教育之一:“引导” 朋友生日祝福短信集锦 必须坚强必须努力! 祈愿,在最美的时光里遇见 高中高三作文800字:默爱 我的初中路作文400字 一题多解克服心理脆弱 颓废的感觉 座谈会的通知范文 江城子·润物应有 在春风缭绕的岁月里 关于马大哈的作文300字 读书笔记的范文 时光清雅,素心安然 高中高一作文900字:赞美小草的作文 浅谈企业文化力的表现及其发挥 面对考官如何回答非常规性问题 好男人疼心爱女友的10个小细节 英文原版书籍推荐排行榜 黄昏痛加急 中班家长工作计划 2015年广东高分作文:博宏通科学之道,微感自然之美 制作风筝——动手又动脑 你忘了为我擦去泪痕。 被“搁浅”的规则 浅谈如何抓好安全生产工作 小学五年级作文1500字:我还奶奶的恩怨

Copyright © 2016 phpStudy |