在 Spring Boot Mongodb 中使用聚合框架按计数查找组

Posted

技术标签:

【中文标题】在 Spring Boot Mongodb 中使用聚合框架按计数查找组【英文标题】:In Spring boot Mongodb find group by count by using Aggregation framework 【发布时间】:2019-02-01 15:05:14 【问题描述】:

您好,我尝试在 Spring Boot 中使用 mongodb 执行 rest api,以通过计数输入数据的样子来查找组。请分享任何逻辑、代码、示例链接。 伙计们,我期待春季启动逻辑。 mongodb聚合框架如何集成。


    "_id" : "PRODUCT_01",
    "productname" : "product1",
    "value" : "codesoft"
,

    "_id" : "PRODUCT_01",
    "productname" : "product2",
    "value" : "codesoft"
,


    "_id" : "PRODUCT_01",
    "productname" : "product1",
    "value" : "codesoft"

预期输出 产品1:2, 产品2:1 任何帮助表示赞赏。

【问题讨论】:

您自己尝试过吗?你的代码在哪里? MongoDB SELECT COUNT GROUP BY的可能重复 阿米特我已经创建,但这不是正确的解决方案,这就是我没有分享的原因.. 【参考方案1】:

试试这个

 db.testColln.aggregate(
 
$group : _id : "$productname", total :  $sum : 1 

 );

用于 Spring Boot

Aggregation agg = newAggregation(
        group("productname").count().as("total")
        project("productname").and("total"),

    );
AggregationResults<Product> groupResults 
        = mongoTemplate.aggregate(agg, Product.class,Result.class);
    List<Result> result = groupResults.getMappedResults();

 public class Result 

     private String productname;

      private long total;

   

【讨论】:

您能解释一下您的解决方案吗?哪些部分是相关的,为什么您认为它们可以解决问题? gaurav thanx 为此,但我需要 Spring Boot mongo 聚合逻辑而不是 mongo 查询 .. mongo 我知道。【参考方案2】:
@GetMapping("/group")
public List<ProductCount> groupByName() 

// grouping by prductName
  GroupOperation groupOperation = 
         Aggregation.group("productName").count().as("count");
// projection operation
 ProjectionOperation projectionOperation = 
 Aggregation.project("count").and("productName").previousOperation();      
// sorting in ascending
 SortOperation sortOperation = 
        Aggregation.sort(Sort.by(Sort.Direction.ASC, "count"));
// aggregating all 3 operations using newAggregation() function
 Aggregation aggregation = 
        Aggregation.newAggregation(groupOperation,projectionOperation 
        ,sortOperation);
// putting in a list 
// "products" is collection name
 AggregationResults<ProductCount> result =
        mongotemplate.aggregate(aggregation, "products", 
        ProductCount.class);    
 return result.getMappedResults();
    

$ 在模型包中创建 ProductCount 类

public class ProductCount 
  private String productName;
  private int count;

  #getters
  #setters

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于在 Spring Boot Mongodb 中使用聚合框架按计数查找组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 在 Mongodb 中保存重复项?

基于spring boot的项目中的spring data mongodb配置

使用环境变量在 Spring Boot 中配置 MongoDB

如何使`org.mongodb.driver.cluster`在spring boot中使用嵌入式mongodb?

在 Spring Boot Mongodb 中使用聚合框架按计数查找组

Spring Boot 和 Spring Data MongoDB:在 ResponseBody 中隐藏字段