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

Как я могу использовать весеннюю загрузку?Агрегация данных весенних загрузок с MongoDB

Мне нужно «yildiz» avg.

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.Bayi! Не удалось определить IsNewStrategy.

Как я могу сохранить репозиторий?

bayiRepository.save(seciliBayi); 

ответ

1

Вот весенний эквивалент. Обратите внимание, что вы не можете достичь агрегации с использованием методов в классе репозитория, как обычные операции с запросами.

Код: -

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}] 

Config класса: -

@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

Добавил мой конфигурационный класс. Вы можете направить mongoTemplate на это. – notionquest

+0

Спасибо большое :) работал :) – forguta

Смежные вопросы