首页 > 基础资料 博客日记
mongodb聚合在Java中的使用
2023-07-24 19:55:42基础资料围观307次
Java资料网推荐mongodb聚合在Java中的使用这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
使用前首先需要配置好MongoTemplate,(详细参考:MongoTemplate的使用)
配置好后在类中注入MongoTemplate对象
@Autowired
private MongoTemplate mongoTemplate;
常用函数
使用前我们先来了解一下常用的函数
-
Aggregation.group() : 聚合函数,将某个字段或者某个数组作为分组统计的依据,在group的基础上又扩展出以下函数:
- sum() : 求和
- max() : 获取最大值
- min() : 获取最小值
- avg() : 获取平均值
- count() : 统计条目数
- first () : 获取group by 后的某个字段的首个值
- last() : 获取 group by 后的某个字段的最后一个值
-
Aggregation.match() : 过滤函数,主要存储过滤数据的条件,输出符合条件的记录
-
Aggregation.project(): 修改数据结构函数,将前面管道中的获取的字段进行重名,增加,修改字段等操作。
-
Aggregation.sort(): 排序函数,将上级管道的内容按照某个字段进行排序并且输出。
-
Aggregation.limit(): 限制输出函数,将聚合返回的内容限定在某个条目之内。通常作为页面大小
-
Aggregation.skip(): 跳过指定数量的条目再开始返回数据的函数,通常和sort(),limit()配合,实现数据翻页查询等操作。
实际用例
用accountId和status做group操作
mongodb:
db.getCollection('mro_fn_subscribes').aggregate([
{
$group:{
_id:{"_id":"$accountId", "status": "$status" },
count : {"$sum": NumberInt(1)},
"statusSum":{"$sum": "$status"},
"codeAvg":{"$avg":"$fnCode"},
"codeMax":{"$max":"$fnCode"},
"codeMin":{"$min":"$fnCode"},
"codeFirst":{"$first":"$fnCode"},
"codeLast":{"$last":"$fnCode"},
}
}
])
java:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("accountId", "status")
.count().as("count")
.sum("status").as("statusSum")
.avg("fnCode").as("codeAvg")
.max("fnCode").as("codeMax")
.min("fnCode").as("codeMin")
.first("fnCode").as("nameFirst")
.last("fnCode").as("nameLast")
);
match管道过滤:
mongodb:
db.getCollection('mro_fn_subscribes').aggregate(
{$match:{userId:"a"}}
)
java:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(new Criteria().and("userId").is("a")
);
project筛选字段:
mongo:
db.getCollection('mro_fn_subscribes').aggregate([
{
"$group" : {
"_id" : "$_id",
"num" : {
"$sum" : "$num"
},
"firstName" : {
"$first" : "$name"
},
"lastName" : {
"$last" : "$name"
}
}
},
{
"$project" : {
"_id" : 1,
"num" : 1,
"firstName" : 1,
"name" : "$lastName"
}
}
])
java:
// 初始化聚合
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group(new String[] {"_id"}).sum("num").as("num")
.first("name").as("firstName")
.last("name").as("lastName"),
Aggregation.project("_id", "num", "firstName")
.and("lastName").as("name") // 重新命名字段
);
sort skip limit处理数据:
Mongo:
db.getCollection('mro_fn_subscribes').aggregate([
{
"$group" : {
_id:{"_id":"$accountId", "status": "$status" }
}
},
{
"$sort" : {
"num" : -1
}
},
{
"$skip" : NumberInt(10)
},
{
"$limit" : NumberInt(2)
}
]
)
Java:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("accountId", "status")
Aggregation.sort(Direction.DESC, "num"), //将num降序
Aggregation.skip(10), //从第10条记录开始
Aggregation.limit(2) //取两条数据
);
获取查询结果
在创建好Aggregation对象之后,再用 mongotemplate.aggregate(aggregation, "mro_fn_subscribes", Fnsubscribe.class).getMappedResults() 获取查询的对象列表
文章来源:https://www.cnblogs.com/wangzhebin/p/16494929.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
上一篇:Java基础1
下一篇:java中对list集合进行分组