废话不多说 直接上代码吧

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
        TypedAggregation<MongoQuotesNewsBean> agg = Aggregation.newAggregation(MongoQuotesNewsBean.class,
                Aggregation.skip(start),
                Aggregation.limit(end),
                Aggregation.group("stockId").first("stockId").as("stockIdFirst").first("pubTime").as("pubTime"),
                Aggregation.sort(new Sort(Sort.Direction.DESC, "pubTime")),
                Aggregation.project("stockIdFirst")
        AggregationResults<Map> aggregationResults = mongoTemplate.aggregate(agg, "quotes_news", Map.class);
        List<Map> stockIdMapList = aggregationResults.getMappedResults();

前提概要:

1.MongoQuotesNewsBean 是MongoDB 存储的实体类

2. "stockId"是待查询mongo实体类的属性

3."stockIdFirst"是自定义的返回值别名 可以在查询结果中取得。

执行顺序由上到下,如上代码会先执行

1.按【pubTime】也是就发布时间倒叙。

2.指定操作数据的范围

3.按【stockId】分组查询 并获取分组后 各个分组第一条记录中的 【stockId】字段 重命名为 【stockIdFirst】

4.返回指定字段 上面返回的就是 分组后查出的 【stockIdFirst】

注意:group("分组字段").first("结果需要返回的字段)

要在group后使用排序,那么排序字段需要用first返回,否则会报错

java.lang.IllegalArgumentException: Invalid reference 'pubTime'!

执行结果如下图所示:

聚合查询结果解析:

1.分组的查询结果通过mappedResults获取 返回的是一个只读的List,通过上面的结果可以看到 上面的查询返回了我需要的stockIdFirst和实体类主键id。

2.rawResults中可以获取查询返回结果总数。

废话不多说 直接上代码吧import org.springframework.data.mongodb.core.aggregation.Aggregation;import org.springframework.data.mongodb.core.aggregation.AggregationResults;import org.springframework.data.mongod... private String id; private String keyword; //关键词 private String keywordUuid;//keyword + datestr 的md5 //搜索相关 private int sessionCount = 0; private int adsCount = import static org. spring framework. data . mongodb .core. aggregation . Aggregation .*; Aggregation agg = new Aggregation ( pipelineOP1(), pipelineOP2(), pipelineOPn... group 操作 1,等同SQL: SELECT COUNT(1) total,marketPointId,marketPointName FROM marketsendcargo WHERE sendDate='2017-03-21' GROUP BY ma...
因为数据量增大的问题,现在越来越多的猿们开始使用 mongodb 等的nosql数据库了。不过 mongodb 非关系型,查询时还是有些许的不便的,比如我们在mysql等里面使用的聚合,在 mongodb 中就不太一样。 mongodb 中的语句不一样,我们java中调用就更不一样了。先看一段代码: public Map queryUserMaxPrice(String userId) { 前几天接到一个需求,提供一个查询多设备最后一次的发送GPS的信息,数据是存在 MongoDB 里面的,每个月的数据都会新建一个collection来存,所以有时候有些设备在当月没有数据的话,需要去查询前一个月的数据返回,所以这里需要一个递归的算法。我原本以为这是一个蛮简单的需求,直接用 MongoDB 的聚合管道技术的match以及 group 函数就能轻松解决,我的想法是: 首先使用match函数筛选所有需要查询的设备GPS信息