2016-12-08 2 views
0
db.yorum.aggregate([ 
    { $match: { bayiId: "5848631a2aa9191f78ff3847" }}, 
    { $group: { _id: "$bayiId" ,avg: { $avg: "$yildiz" }}} 
]) 

스프링 부트에는 어떻게 사용할 수 있습니까?MongoDB와의 스프링 부트 데이터 집계

나는 "아이디즈"평균이 필요합니다.

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를 구성 클래스

my collection

. mongoTemplate을 어떻게 추가 할 수 있습니까?

편집

java.lang.IllegalArgumentException가 : 지원되지 않는 개체 com.application.domain.Bayi! IsNewStrategy를 결정할 수 없습니다.

어떻게 저장소를 저장할 수 있습니까?

bayiRepository.save(seciliBayi); 

답변

1

다음은 스프링과 동일합니다. 일반적인 쿼리 작업처럼 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 개체 - 개체를 경우

당신은 mongoTemplategetMongoConnection()를 교체 할 수 있습니다. 이것이 내 프로젝트 별 구성입니다. 방금 설명을 추가했습니다.

@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; 
    } 

} 
+0

도움 주셔서 감사합니다. 하지만 내 게시물을 편집합니다. 나는 MongoDBConfig.java를 가지고있다. 어떻게 mongotemplate을 클래스에 추가 할 수 있는가? – forguta

+0

내 config 클래스를 추가했습니다. 이것에 대해 mongoTemplate을 참조 할 수 있습니다. – notionquest

+0

고마워요 :) :) – forguta

관련 문제