db.yorum.aggregate([
{ $match: { bayiId: "5848631a2aa9191f78ff3847" }},
{ $group: { _id: "$bayiId" ,avg: { $avg: "$yildiz" }}}
])
我如何在Spring Boot中使用?
我需要一个“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.Bayi!无法确定IsNewStrategy。
我如何保存存储库?
bayiRepository.save(seciliBayi);
答案 0 :(得分: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;
}
}