Spring Data MongoDB Aggregation Grouping Example

摘要: In this tutorial, we will show you how to do the data grouping with Spring Data + MongoDB aggregation framework.

In this tutorial, we will show you how to do the data grouping with Spring Data + MongoDB aggregation framework.

1. Test Data

domain.json
{ "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
{ "_id" : 2, "domainName" : "test2.com", "hosting" : "aws.amazon.com"}
{ "_id" : 3, "domainName" : "test3.com", "hosting" : "aws.amazon.com" }
{ "_id" : 4, "domainName" : "test4.com", "hosting" : "hostgator.com" }
{ "_id" : 5, "domainName" : "test5.com", "hosting" : "aws.amazon.com" }
{ "_id" : 6, "domainName" : "test6.com", "hosting" : "cloud.google.com" }
{ "_id" : 7, "domainName" : "test7.com", "hosting" : "aws.amazon.com" }
{ "_id" : 8, "domainName" : "test8.com", "hosting" : "hostgator.com" }
{ "_id" : 9, "domainName" : "test9.com", "hosting" : "cloud.google.com" }
{ "_id" : 10, "domainName" : "test10.com", "hosting" : "godaddy.com" }
...
{ "_id" : 100, "domainName" : "test10.com", "hosting" : "godaddy.com" }

2. MongoDB Aggregation Example

MongoDB aggregation example to sum the total number of hosting :

db.domain.aggregate(
	$match : {_id:{$lt:10}}
    },
    { 
	$group : {_id : "$hosting", total : { $sum : 1 }}
    },
	$sort : {total : -1}
);

Output

{ "_id" : "aws.amazon.com", "total" : 4 }
{ "_id" : "hostgator.com", "total" : 3 }
{ "_id" : "cloud.google.com", "total" : 2 }
{ "_id" : "godaddy.com", "total" : 1 }

2. Spring Data + MongoDB Aggregation Example

This is the equivalent example in Spring Data MongoDB.

DomainDaoImpl.java
package com.mkyong.core.domain.dao;
//imports as static
import static org.springframework.data.mongodb.core.aggregation.Aggregation.group;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.project;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.sort;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import com.mkyong.core.domain.model.Domain;
import com.mkyong.core.hosting.model.HostingCount;
import java.util.List;
@Repository
public class DomainDaoImpl implements DomainDao {
	@Autowired
	MongoTemplate mongoTemplate;
	public List<HostingCount> getHostingCount() {
		Aggregation agg = newAggregation(
			match(Criteria.where("_id").lt(10)),
			group("hosting").count().as("total"),
			project("total").and("hosting").previousOperation(),
			sort(Sort.Direction.DESC, "total")
		);
		//Convert the aggregation result into a List
		AggregationResults<HostingCount> groupResults 
			= mongoTemplate.aggregate(agg, Domain.class, HostingCount.class);
		List<HostingCount> result = groupResults.getMappedResults();
		return result;
HostingCount.java
package com.mkyong.core.hosting.model;
public class HostingCount {
	private String hosting;
	private long total;
	//...
More Examples
Refer to this official Spring data – Aggregation Framework Support

References

  1. MongoDB – Aggregation Concepts
  2. MongoDB – Aggregate And Group Example
  3. Spring.io – Aggregation Framework Support

上一篇: Gradle Create Java project structure automatically
下一篇: Gradle Application Plugin APP_HOME in applicationDefaultJvmArgs
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号