【问题标题】:In Spring boot Mongodb find group by count by using Aggregation framework在 Spring Boot Mongodb 中使用聚合框架按计数查找组
【发布时间】: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 } 任何帮助表示赞赏。

【问题讨论】:

  • 您自己尝试过吗?你的代码在哪里?
  • 阿米特我已经创建,但这不是正确的解决方案,这就是我没有分享的原因..

标签: spring mongodb spring-boot aggregation


【解决方案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
猜你喜欢
  • 2021-06-15
  • 2012-10-25
  • 2013-07-31
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2013-12-25
  • 2013-01-12
  • 2023-01-31
相关资源
最近更新 更多