原数据:

/* 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. php switch case的"bug"

    首先说明,这不是一个bug.应该说是一个比较容易中招的陷阱. 今天使用switch遇到一个问题,代码如下: <?php $num = 0; switch ($price) { case $pri ...

  2. 【python】smtp邮件发送

    纯文本: #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from ...

  3. emacs之配置speedbar

    安装sr-speedbar,这样的话,speedbar就内嵌到emacs里面了 emacsConfig/speedbar-setting.el (require 'sr-speedbar) (setq ...

  4. 简化Redis数据访问代码RedisTemplate

    ---恢复内容开始--- Redis数据结构简介: Redis可以存储键与5中数据结构类型之间的映射,这5中数据结构类型分别是;String(字符串),List(列表),Set(集合),Hash(散列 ...

  5. python mysql模块

    多次使用python操作mysql数据库,先与大家分享一下,关于如何使用python操作mysql数据库.mysql并不是python自带的模块,因此需要下载安装.(在windows平台下介绍该使用过 ...

  6. 各种装饰器demo及优化

    #!/usr/bin/python3# -*- coding: utf-8 -*-# @Time    : 2018/5/28 14:06# @File    : lianxi.py ## impor ...

  7. SpringBoot2.0实现静态资源版本控制

    写在最前面 犹记毕业第一年时,公司每次发布完成后,都会在一个群里通知[版本更新,各部门清理缓存,有问题及时反馈]之类的话.归根结底就是资源缓存的问题,浏览器会将请求到的静态资源,如JS.CSS等文件缓 ...

  8. OpenCL 事件的使用,以及回调函数

    ▶ 事件的两种使用方法.第一种是用事件 a 标记进入命令队列的操作 A,于是后续进入命令队列的操作 B 可以被要求等到前面事件 a 完成(即操作 A 完成)以后才能开始调度执行.第二种是使用用户自定义 ...

  9. leetcode73

    public class Solution { public void SetZeroes(int[,] matrix) { ); ); var listrow = new Dictionary< ...

  10. LPCTSTR和LPTSTR和char *究竟有什么区别

    LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...