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

Spring数据MongoDB聚合SORT顺序

申昌勋
2023-03-14

我的应用程序使用Spring数据MongoDB,我试图在嵌入式文档中按降序排序数据,这是不工作的。

请参考以下JSON文档

JSON-库存文件:

{
    "_id" : ObjectId("57c6fd7099275c83e6a5b312"),
    "from" : "China",
    "stockDemandPerItem" : [ 
        {
            "item" : "apples",
            "demand" : 150.0
        }, 
        {
            "item" : "plums",
            "demand" : 200.0
        },
        {
            "item" : "pears",
            "demand" : 250.0
        },
        {
            "item" : "oranges",
            "demand" : 100.0
        }
    ]
}

Spring数据Mongodb聚合查询:

TypedAggregation<Stock> typedAggr =  
         newAggregation(Stock.class, unwind("stockDemandPerItem"),
         project("stockDemandPerItem.item",
         "stockDemandPerItem.demand"),
          sort(Direction.DESC, "stockDemandPerItem.demand"),
            limit(3));

AggregationResults<StockDemandPerItem> results = mongoTemplate.
   aggregate(typedAggr, StockDemandPerItem.class);

List<StockDemandPerItem> list = results.getMappedResults();

for(StockDemandPerItem stockDemandPerItem : list) {
      System.out.println(stockDemandPerItem.getItem() + 
      " :: " +    stockDemandPerItem.getDemand());
}

电流输出:

苹果:150.0

李子:200.0

橙子:500.0

预期产量(按需求描述订单):

橙子:500.0

李子:200.0

苹果:150.0

你能帮我按降序得到预期的输出吗?

此外,我计划通过使用上述带限制(1)的查询来查找最大“需求”值

共有1个答案

柴兴修
2023-03-14

我们可以使用java中的集合排序来实现这一点。

编辑类StockDemandPerItem,如下所示:

public class StockDemandPerItem implements Comparable<StockDemandPerItem>{

//existing code goes here
@Override
public int compareTo(StockDemandPerItem compareStockDemand) {
    //descending order
    return compareStockDemand.getDemand().compareTo(this.getDemand());
   } 
} 

在打印循环之前还要添加这行代码-

Collections.sort(list);
 类似资料:
  • 有人知道如何使用Spring-Data将下面的聚合函数转换成java代码吗?

  • 有人能帮我把这个mongoDB聚合转换成Spring数据mongo吗? 我试图在每个邀请函文件中获得未提醒与会者的电子邮件列表。 让它在mongo shell中运行,但需要在Spring data mongo中运行。 我的shell查询 ) 正如你们所看到的,这是我提出的,它在管道的项目和团队运作中并没有像预期的那样发挥作用。下面给出了生成的查询。 聚合对象创建 它创建以下查询 聚合对象生成的查询

  • 我使用Spring(引导)2.2.7与mongoDB 4.0运行在Debian Stretch(9.12)。我已经设置了3个集合,我试图通过聚合查找级联操作加入这些集合。 操作(节点类) 股票(组件类) 目录(产品类) 每个类都有一个将它们链接在一起的uuid字符串属性。 节点(传感器、接收器、基站等) 组件(带有序列号、条形码的交付产品…) 产品(市场人工制品) 在mongo shell中运行此

  • 我在使用聚合框架从MongoDB读取文档时遇到了问题:我的结果中总是得到空ID。这只发生在具有复合ID的文档中。我尝试了各种版本的spring-data-mongob(1.10.12, 2.0.7),结果相同。 实体定义类 测试代码 输出 调试到以下方法MappingMongoConverter。read(final mongopersistenentity entity、final Docume

  • 我将如何在Spring靴中使用? 我需要一个“yildiz”平均值。 我的收藏 avg_yildiz MongoDBConfig。Java语言 MongoDB配置类。如何添加mongoTemplate? 编辑 Java语言lang.IllegalArgumentException:不支持的实体com。应用领域八一!无法确定IsNewStrategy。 如何保存存储库?

  • 我有一个mongo查询,用于展开四个对象数组,并根据匹配条件过滤数据。如何在Spring data mongodb中执行相同的操作 我使用过单次放卷,但找不到任何具有多次放卷和匹配操作的。