mongo学习-group操作以及java代码
原数据:
/* 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代码的更多相关文章
- mongo学习- group操作
group可以使用 $sum,$avg,$max,$min,$first,$last
- mongodb命令行group分组和java代码中group分组
group分组统计是数据库比较常用的功能,mongodb也不例外.不过相对于普通的增删改查,group操作就略微麻烦一些, 这里对group在shell中的操作.使用java原生代码操作以及集成spr ...
- 六、Android学习笔记_JNI_c调用java代码
1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...
- Android学习笔记_JNI_c调用java代码
1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // ...
- Spring学习系列(三) 通过Java代码装配Bean
上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...
- HDFS Shell命令操作与java代码操作
(一)编程实现以下功能,并利用 Hadoop 提供的 Shell 命令完成相同任务: (1) 向 HDFS 中上传任意文本文件,如果指定的文件在 HDFS 中已经存在,则由用户来指定是追加到原 ...
- HDFS客户端操作(JAVA代码)
环境准备 windows需要配置hadoop的windows下的依赖 安装包地址: 链接:https://pan.baidu.com/s/1QtbH-x-S0QytkmaoSosdEw 提取码:2kt ...
- mongo学习- mapReduce操作事例
源数据: { "_id" : 1.0, "name" : "abc", "age" : 43.0, "type ...
- 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)
一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...
随机推荐
- INET_ADDRSTRLEN 和 INET6_ADDRSTRLEN 长度
在<netinet/in.h>中有这两个宏的定义 #define INET_ADDRSTRLEN 16 #define INET6_ADDRSTRLEN 46 INET_ADDRSTRLE ...
- cratedb 基本试用
安装 docker run -d -p 4200:4200 crate UI访问 http://localhost:4200/#!/ 创建数据 tweets 是默认导入的,点击帮助导航可以操作 登陆 ...
- linux-一篇文章完成lnmp环境的编译安装
lnmp环境搭建 前置条件 操作系统安装:CentOS 6.8 64位最小化安装. 配置好IP.DNS.网关.主机名 配置防火墙,开启80.3306端口 关闭访问墙 service iptables ...
- centos6.5下tomcat安装
1.安装JDK 安装:rpm –ivh jdk-7u5-linux-i586.rpm2.配置Tomcat 解压:tar -zxvf apache-tomcat-8.0.11.tar.gz 移动到/us ...
- vue通过(NGINX)部署在子目录或者二级目录实践
1.修改 router/index.js 添加一行 base: 'admin', 2.然后修改 config/index.js 增加一行 const assetsPublicPath = '/admi ...
- erlang的一些系统限制修改
atom个数限制 +t xxx 进程数限制 +P xxxx ets表个数限制 +e xxx ports个数限制 +Q xxxx 查看限制 string:tokens(binary_to_list(er ...
- H5页面获取openid,完成支付公众号(未关注公众号)支付
一.页面授权 // 进入页面获取权限code function initAuthorizeCode() { var appid = $("#appid").val();//公众号a ...
- 字符串作为freemarker模板的简单实现例子
本文转载自:http://blog.csdn.net/5iasp/article/details/27181365 package com.test.demo; import java.io.IOEx ...
- [转]MVC 经验总结_EF
&& o.Name != "") .OrderByDescending(o => o.ID) .OrderBy(o => o.Name) .Select ...
- mysql-2 数据类型
mysql中定义数据字段的类型对数据库的优化是非常重要的. mysql数据类型大致分为三类:数值.日期/时间.字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严 ...