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

Spring数据MongoDB-聚合方法

楚昀
2023-03-14

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

db.myCollection.aggregate([
    {$match:{"status" : {$in:["WORKING","UNASSIGNED"]}}},
    {$group:{
            _id:{
                "status":"$status",
                "queue":"$queueName"
             },
             "count":{$sum:1},
             "oldest":{$min:"$queueTime"},
             "slow":{$sum:{$cond:[
                                {$lte: ["$queueServiceTs", new Date()]},
                                        1,
                                        0]}
                          }

        }
    }
]);

共有1个答案

空翼
2023-03-14

Spring mongo目前也不支持:

>

  • 具有自定义键名的复合聚合_id,当然您可以接受defualt字段名转换

    使用$cond操作或$sum中的任何表达式,因为它只支持映射字段。

    public class CustomGroupOperation implements AggregationOperation {
        private DBObject operation;
    
        public CustomGroupOperation (DBObject operation) {
            this.operation = operation;
        }
    
        @Override
        public DBObject toDBObject(AggregationOperationContext context) {
            return context.getMappedObject(operation);
        }
    }
    
        Aggregation aggregation = newAggregation(
                new CustomGroupOperation(
                        new BasicDBObject("$group",
                            new BasicDBObject("_id",
                                new BasicDBObject("status","$status")
                                    .append("queue","$queueName")
                            )
                            .append("count",new BasicDBObject("$sum",1))
                            .append("oldest", new BasicDBObject("$min","$queueTime"))
                            .append("slow",
                                new BasicDBObject("$sum",
                                    new BasicDBObject("$cond",Arrays.asList(
                                        new BasicDBObject("$lte",Arrays.asList(
                                            "$queueServiceTs",
                                            new Date()
                                        )),
                                        1,
                                        0
                                    ))
                                )
                            )
                        )
                )
        );
    

    这样就用$group阶段构建了一个管道。

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

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

    • 我使用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中执行相同的操作 我使用过单次放卷,但找不到任何具有多次放卷和匹配操作的。