使用 MongoDB 进行 Spring Boot 数据聚合
Posted
技术标签:
【中文标题】使用 MongoDB 进行 Spring Boot 数据聚合【英文标题】:Spring Boot Data Aggregation with MongoDB 【发布时间】:2017-04-23 13:15:53 【问题描述】:db.yorum.aggregate([
$match: bayiId: "5848631a2aa9191f78ff3847" ,
$group: _id: "$bayiId" ,avg: $avg: "$yildiz"
])
如何在 Spring Boot 中使用?
我需要一个“yildiz”平均值。
my collection
avg_yildiz
MongoDBConfig.java
@Configuration
@ComponentScan(basePackages="com.application.repository")
@EnableMongoRepositories(basePackages = "com.application.repository")
@EnableMongoAuditing(modifyOnCreate=false)
public class MongoDBConfig extends AbstractMongoConfiguration
@Override
protected String getDatabaseName()
return "application";
@Override
public Mongo mongo() throws Exception
return new MongoClient("localhost", 27017);
@Bean
public MongoExceptionTranslator exceptionTranslator()
return new MongoExceptionTranslator();
@Bean
public LoggingEventListener logginEventListener()
return new LoggingEventListener();
MongoDB 配置类。如何添加 mongoTemplate ?
编辑
java.lang.IllegalArgumentException:不支持的实体 com.application.domain.八一!无法确定 IsNewStrategy。
如何保存存储库?
bayiRepository.save(seciliBayi);
【问题讨论】:
【参考方案1】:这是 Spring 等价物。请注意,您无法像普通查询操作那样使用 Repository 类中的方法来实现聚合。
代码:-
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;
public String findAverageForYourm(String bayiId)
TypedAggregation<Yorum> aggregation = newAggregation(Yorum.class,
match(Criteria.where("bayiId").is(bayiId)),
group("bayiId").avg("yildiz").as("avgVal")
);
MongoOperations mongoOperations = getMongoConnection();
AggregationResults<Yorum> results = mongoOperations.aggregate(aggregation, Yorum.class);
System.out.println(results.getRawResults().get("result"));
return results.getRawResults().get("result").toString();
MongoTemplate 对象:-
如果您有对象,您可以将getMongoConnection()
替换为mongoTemplate
。这是我的项目特定配置。我刚刚添加了它以进行澄清。
@SuppressWarnings("resource")
public MongoOperations getMongoConnection()
return (MongoOperations) new AnnotationConfigApplicationContext(SpringMongoConfig.class)
.getBean("mongoTemplate");
简单语法:-
AggregationResults<OutputType> results = mongoTemplate.aggregate(agg, "INPUT_COLLECTION_NAME", OutputType.class);
输出:-
[ "_id" : "5848631a2aa9191f78ff3847" , "avgVal" : 4.333333333333333]
配置类:-
@Configuration
@EnableMongoRepositories(basePackageClasses = RepositoryPackage.class)
@ComponentScan(basePackageClasses = RepositoryPackage.class)
public class SpringMongoConfig extends AbstractMongoConfiguration
public @Bean MongoDbFactory mongoDbFactory() throws Exception
return new SimpleMongoDbFactory(new MongoClient(), "localhost");
public @Bean MongoTemplate mongoTemplate() throws Exception
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
return mongoTemplate;
@Override
protected String getDatabaseName()
return "localhost";
@Override
public Mongo mongo() throws Exception
MongoClient client = new MongoClient("localhost");
client.setWriteConcern(WriteConcern.SAFE);
return client;
【讨论】:
感谢您的帮助。但我编辑我的帖子。我有一个 MongoDBConfig.java。如何在类中添加 mongotemplate? 添加了我的配置类。您可以在此参考 mongoTemplate。 我有问题。当我更改我的 mongoconfigure 时,我无法保存数据。我添加了我的帖子外观。以上是关于使用 MongoDB 进行 Spring Boot 数据聚合的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security、Spring Boot 和 MongoDB 进行密码编码和解码
使用 Spring Boot 和 MongoTemplate 对 MongoDB 结果进行排序
使用spring boot在mongodb中进行多个搜索查询
在 Docker 上使用 MongoDB 进行 Spring Boot
如何使用 spring security 和 spring boot 对 Google 用户进行身份验证,将 mongoDB 作为存储库?