废话不多说 直接上代码吧
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信息