文档章节

记录Spring MongoDB Group 操作

Elkan
 Elkan
发布于 2017/03/29 14:42
字数 470
阅读 92
收藏 0

待处理数据库表结构如下:

group 操作 1,等同SQL:

SELECT COUNT(1) total,marketPointId,marketPointName FROM marketsendcargo
WHERE sendDate='2017-03-21' GROUP BY marketPointId;
Aggregation agg = newAggregation(
        match(Criteria.where("sendDate").is(totalDate)),
        group("marketPointId","marketPointName").count().as("total"),
        project("total"),
        sort(Sort.Direction.DESC, "total")
);

group 操作 2,等同SQL:

SELECT SUM(sendCount) total,marketPointId,marketPointName FROM marketsendcargo
WHERE sendDate='2017-03-21' GROUP BY marketPointId;
Aggregation agg2 = newAggregation(
        match(Criteria.where("sendDate").is(totalDate)),
        group("marketPointId", "marketPointName").sum("sendCount").as("total"),
        project("total"),
        sort(Sort.Direction.DESC, "total")
);

另外一种解决方法:

Query query = new Query(Criteria.where("sendDate").is(totalDate));
String reduce = "function(doc, aggr){" +
"            aggr.count += 1;" +
"        }";

DBObject result = this.mongoDBDao.getMongoTemplate().getCollection("marketsendcargo").group(
new BasicDBObject("marketPointId",1).append("marketPointName",1),
query.getQueryObject(),
new BasicDBObject("count", 0),
reduce);

Map map = result.toMap();
System.out.println(JSONObject.toJSONString(map));

group and distinct

SELECT COUNT(1),marketPointId,marketPointName FROM 
(SELECT DISTINCT freightDeptId,marketPointId,marketPointName FROM marketsendcargo )T;
Aggregation agg = newAggregation(
    match(Criteria.where("sendDate").gte(date1).lte(date2)),
    group("marketPointId","marketPointName","freightDeptId"),
	group("$_id.marketPointId","$_id.marketPointName").count().as("total")
);
db.marketsendcargo.aggregate([
        {
            "$group": {
                "_id": {
                    "marketPointId" : "$marketPointId",
                    "marketPointName" : "$marketPointName",
                    "freightDeptId" : "$freightDeptId"
                },
            }
        },
        {
            "$group": { 
                "_id": {"marketPointId" : "$_id.marketPointId", "marketPointName" : "$_id.marketPointName"},
                "total": { "$sum": 1 } 
            }
        },
        {
            "$sort": {
                "total": -1
            }
        }
    ])

延伸阅读:

newAggregation中对应的方法如下:

$project:可以对输入文档进行添加新字段或删除现有的字段,可以自定哪些字段显示与不显示。

$match :根据条件用于过滤数据,只输出符合条件的文档,如果放在pipeline前面,根据条件过滤数据,传输到下一个阶段管道,可以提高后续的数据处理效率。还可以放在out之前,对结果进行再一次过滤。

$limit :用来限制MongoDB聚合管道返回的文档数

$skip :在聚合管道中跳过指定数量的文档,并返回余下的文档。

$unwind :将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$out :必须为pipeline最后一个阶段管道,因为是将最后计算结果写入到指定的collection中。

$group : 将集合中的文档分组,可用于统计结果,$group首先将数据根据key进行分组。

© 著作权归作者所有

共有 人打赏支持
Elkan

Elkan

粉丝 1
博文 13
码字总数 5792
作品 0
成都
程序员
私信 提问
MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB

Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作。Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统Spring项目的繁琐配...

jerrywangsap
2018/09/28
0
0
通过spring-data-mongodb 操作mongodb

一、前言 其实,以前项目组也使用过mongodb,只是那时候是作为主数据库来使用,所以在框架方面会更加复杂,比如使用jpa,如果只是把mongodb作为附数据库使用的话,个人认为通过spring-data-m...

漂泊者及其影子
2014/11/19
0
0
springboot系列十一 Spring-Data-MongoDB

mongodb 数据存储格式类似于json 官方文档 https://docs.mongodb.com/manual/?_ga=2.34252649.996507481.1543901385-1321775126.1543901385 官方示例java代码 支持语言 安装方法 Windows安装......

yimingkeji
2018/12/04
0
0
spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢
2018/04/22
0
0
使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库。本文介绍使用Spring Data MongoDB来访问mongodb数据库的几种方法: 使用Query和Criteria类 ...

xiaomin0322
2018/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部