【问题标题】:Spring Boot Data Aggregation with MongoDB使用 MongoDB 进行 Spring Boot 数据聚合
【发布时间】: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);

【问题讨论】:

    标签: mongodb spring-boot aggregation-framework


    【解决方案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 时,我无法保存数据。我添加了我的帖子外观。
    猜你喜欢
    • 2018-10-28
    • 2017-06-02
    • 2021-06-15
    • 1970-01-01
    • 2018-02-05
    • 2019-06-29
    • 2023-04-10
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多