原数据:

/* 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. mysql学习--基本使用

    一旦安装完毕,MySQL 服务器应该自己主动启动. sudo start mysql #手动的话这样启动 sudo stop mysql #手动停止 当你改动了配置文件后,你须要重新启动 mysqld ...

  2. 排列组合算法(基于c++实现)

    排列 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个.现以{1, 2, 3}为例说明如何编写全排列的递归算法 第一层S1表示第一个数分别与第1.2.3个数交换位置,如123 ...

  3. 黄聪:sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”

    当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表, 然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改 .您所做的更改要求删除并重新创 ...

  4. Script_Notepad++如何调试VBS脚本

    一.NotePad++安装 1. 下载并安装Notepad++,安装步骤一路Next就可以了. 二.NppExec插件安装和配置 1. 下载并解压 NppExec_041_dll_Unicode.zi ...

  5. 记一次在 Ubutun16.04 LTS 系统的 python-environment 安装 MySQL-python 的心(苦)路(笑)旅程

    背景 之前项目需要准备线啦, 那么好了~~ 数据库也从测试时使用的 SQLITE 升级到了 MYSQL (高大上的免费且开源的关系型数据库,要不要了解一下!) 巧合的是,同事使用的是MySQL-pyt ...

  6. Selenium2+python自动化62-jenkins持续集成环境搭建

    前言 selenium脚本写完之后,一般是集成到jenkins环境了,方便一键执行. 一.环境准备 小编环境: 1.win10 64位 2.JDK 1.8.0_66 3.tomcat 9.0.0.M4 ...

  7. 关于memcache分布式一致性hash

    consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1  ...

  8. Win10 安装 及应用遇到的问题

    IOS https://www.microsoft.com/zh-cn/software-download/techbench setup win10安装必须用administrator账号安装 在w ...

  9. VMware CentOS Device eth0 does not seem to be present

    在VMware里克隆出来的CentOS Linux.. ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting ...

  10. oracle ROW_NUMBER用法

    Oracle中row_number().rank().dense_rank() 的区别 row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复 使 ...