当前位置: 首页 > 知识库问答 >
问题:

使用MongoDB进行Spring Boot数据聚合

尚阳炎
2023-03-14
db.yorum.aggregate([
    { $match: { bayiId: "5848631a2aa9191f78ff3847" }},
    { $group: { _id: "$bayiId" ,avg: { $avg: "$yildiz" }}}
])

我将如何在Spring靴中使用?

我需要一个“yildiz”平均值。

我的收藏

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。应用领域八一!无法确定IsNewStrategy。

如何保存存储库?

bayiRepository.save(seciliBayi);

共有1个答案

云季同
2023-03-14

这是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()替换为mongoTemboard。这是我的项目特定配置。我刚刚添加它以进行澄清。

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

}
 类似资料:
  • 本文向大家介绍使用MongoDB聚合按多个字段进行计数,包括了使用MongoDB聚合按多个字段进行计数的使用技巧和注意事项,需要的朋友参考一下 要按多个字段计数,请在MongoDB中使用$facet。在$facet处理在同一组输入文档的单级中的多个聚集的管道。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是要按多个字段计数的查询- 这将产

  • 我有两个集合。如果集合2中的1号和2号在集合1中指定的一定范围内,我正在尝试将集合2的文档添加到集合1中。集合1中的FYI ObjectId和集合2中的ObjectId指的是两个不同的项目/产品,因此我无法在此id上加入两个集合。 集合1中的示例文档: 集合2中的示例文档: 我想要输出: 我认为使用管道的查找阶段可以工作。我的代码当前如下: 但是运行上面的没有给我输出。我做错了什么吗??

  • 除了第 3 章的 Express 的介绍以及后面第 10 章的安全之外,本章也是全书我最喜欢的章节了。 毫无疑问,几乎所有的应用都会涉及到数据存储。但是 Express 框架本身只能通过程序变量来保存数据,它并不提供数据持久化功能。而仅仅通过内存来保存数据是无法应对真实场景的。因为内存本身并不适用于大规模的数据储存而且服务停止后这些数据也会消失。另外,使用内存中的数据是无法跨机器共享的。虽然我们还

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 有人知道如何使用Spring-Data将下面的聚合函数转换成java代码吗?

  • 我的应用程序使用Spring数据MongoDB,我试图在嵌入式文档中按降序排序数据,这是不工作的。 请参考以下JSON文档 JSON-库存文件: Spring数据Mongodb聚合查询: 电流输出: 苹果:150.0 李子:200.0 橙子:500.0 预期产量(按需求描述订单): 橙子:500.0 李子:200.0 苹果:150.0 你能帮我按降序得到预期的输出吗? 此外,我计划通过使用上述带限