原数据:

/* 1 */
{
"_id" : ObjectId("552a330e05c27486b9b9b650"),
"_class" : "com.mongo.model.Orders",
"onumber" : "002",
"date" : ISODate("2014-01-03T16:03:00.000Z"),
"cname" : "zcy",
"item" : {
"quantity" : 1.0,
"price" : 4.0,
"pnumber" : "p002"
}
} /* 2 */
{
"_id" : ObjectId("552a331d05c275d8590a550d"),
"_class" : "com.mongo.model.Orders",
"onumber" : "003",
"date" : ISODate("2014-01-04T16:03:00.000Z"),
"cname" : "zcy",
"item" : {
"quantity" : 10.0,
"price" : 2.0,
"pnumber" : "p001"
}
} /* 3 */
{
"_id" : ObjectId("552a333105c2f28194045a72"),
"_class" : "com.mongo.model.Orders",
"onumber" : "003",
"date" : ISODate("2014-01-04T16:04:00.000Z"),
"cname" : "zcy",
"item" : {
"quantity" : 30.0,
"price" : 4.0,
"pnumber" : "p002"
}
} /* 4 */
{
"_id" : ObjectId("552a333f05c2b62c01cff50e"),
"_class" : "com.mongo.model.Orders",
"onumber" : "004",
"date" : ISODate("2014-01-05T16:03:00.000Z"),
"cname" : "zcy",
"item" : {
"quantity" : 5.0,
"price" : 4.0,
"pnumber" : "p002"
}
}

  

一。mongo语句

db.orders.group({
key:{date:1,"item.pnumber" : 1},
initial:{"total":0},
reduce:function Reduce(doc,out){
out.total+=doc.item.price
}
})

  

对out数据进一步处理

db.orders.group({
key: {
date: 1
},
initial: {
"total": 0,
"money":0
},
reduce: function Reduce(doc, out) {
out.total += doc.item.quantity;
out.money += doc.item.price*doc.item.quantity
},
finalize:function Finalize(out){
out.avg=out.money/out.total
return out } })

  

keyf :对分组字段先进行处理然后分组

db.orders.group({
keyf: function keysss(doc){
return {"month":doc.date.getDay()+1}
},
initial: {
"total": 0,
"money":0
},
reduce: function Reduce(doc, out) {
out.total += doc.item.quantity;
out.money += doc.item.price*doc.item.quantity
},
finalize:function Finalize(out){
out.avg=out.money/out.total
return out
} })

  

java代码:

@Test
public void group(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:111.xml");
MongoTemplate mongoTemplate= (MongoTemplate) applicationContext.getBean("mongoTemplate");
GroupBy groupBy=new GroupBy("date");
BasicDBObject basicDBObject=new BasicDBObject();
basicDBObject.put("total",0);
basicDBObject.put("money",0);
groupBy.initialDocument(basicDBObject);
groupBy.reduceFunction("function Reduce(doc, out) {out.total += doc.item.quantity;out.money += doc.item.price*doc.item.quantity}");
groupBy.finalizeFunction("function Finalize(out){\n" +
" out.avg=out.money/out.total\n" +
" return out\n" +
" }");
// groupBy.finalizeFunction("function Finalize(out) {out.avg = out.money / out.totalreturn out}");
GroupByResults<Object> orders = mongoTemplate.group("orders", groupBy, Object.class); }

  

mongo学习-group操作以及java代码的更多相关文章

  1. mongo学习- group操作

    group可以使用 $sum,$avg,$max,$min,$first,$last

  2. mongodb命令行group分组和java代码中group分组

    group分组统计是数据库比较常用的功能,mongodb也不例外.不过相对于普通的增删改查,group操作就略微麻烦一些, 这里对group在shell中的操作.使用java原生代码操作以及集成spr ...

  3. 六、Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  4. Android学习笔记_JNI_c调用java代码

    1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...

  5. Spring学习系列(三) 通过Java代码装配Bean

    上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...

  6. HDFS Shell命令操作与java代码操作

    (一)编程实现以下功能,并利用 Hadoop 提供的 Shell 命令完成相同任务: (1)     向 HDFS 中上传任意文本文件,如果指定的文件在 HDFS 中已经存在,则由用户来指定是追加到原 ...

  7. HDFS客户端操作(JAVA代码)

    环境准备 windows需要配置hadoop的windows下的依赖 安装包地址: 链接:https://pan.baidu.com/s/1QtbH-x-S0QytkmaoSosdEw 提取码:2kt ...

  8. mongo学习- mapReduce操作事例

    源数据: { "_id" : 1.0, "name" : "abc", "age" : 43.0, "type ...

  9. 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)

    一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...

随机推荐

  1. java之 JVM 内存管理详解

    一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时 ...

  2. windows上如何安装Sqlite

    一.安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下载下来sqlite-dll-win ...

  3. centos 6.5 单实例搭建 ELK

    2018-07-02     21:32:33 ELK 单实例搭建 环境搭建 1.1我的系统版本 Distributor ID: CentOS Description:     CentOS rele ...

  4. 写给C#程序员的javascript说明: 各类型变量和prototype

    在javascript中存在类似的私有变量 公有变量和静态变量 私有: var AA=function(){ var aa="im private"; }; 私有变量通过闭包访问. ...

  5. LCD的接口类型详解

    LCD的接口有多种,分类很细.主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式.MCU模式 ...

  6. VS解决方案的目录结构设置和管理

    一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档.除此以外,根据项目的需求,还会使用一些第三方的库.   所以为解决 ...

  7. html5播放mp4视频代码

    1.nginx支持flv和mp4格式播放 默认yum安装nginx centos7安装nginx时候应该是默认安装nginx_mod_h264_streaming模块的 # nginx -V查看是否安 ...

  8. SpringBoot入门篇--使用IDEA创建一个SpringBoot项目

    随着技术的更新对于开发速度的追求,我们越来越不能忍受的是Spring框架对于集成开发以后大量的配置问题.所以SprigBoot应运而生,SpringBoot框架其实就是在Spring框架的外边包裹上了 ...

  9. vim删除行首数字

  10. Cordova+Vue构建Hybrid APP简易实操

    当下APP市场,因为Native APP开发成本高,Web APP不稳定,混合开发APP大行其道,成为越来越多开发者的首选.Hybrid APP开发框架也比较多,Weex.Ionic.PhoneGap ...