将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data

Posted

技术标签:

【中文标题】将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data【英文标题】:Translate mongodb aggregate query into Java/Kotlin Spring Data 【发布时间】:2021-04-07 09:40:39 【问题描述】:

所以我想出了一个我不确定如何转换为 Spring Data 的查询。这是查询:

db.collection.aggregate([
    
        $group: 
            _id: "$field",
            count: 
                $sum: "$count"
            ,
            data: 
                "$addToSet": "$$ROOT"
            
        
    ,
    
        $sort: 
            count: -1
        
    ,
    
        $limit: 10
    ,
    
        $unwind: "$data"
    
])

有问题的部分是unwind。在这个原始查询中,我将正在处理的原始文档(“$$ROOT”)放入data,因此在处理集合后,我可以展开它并最终得到我真正想要的文档.这在外壳上工作正常。问题是我没有看到如何在 Java/Kotlin 中执行相同的操作,我可以添加到集合中,而无需稍后引用该数据。有人可以帮我写下 Java/Kotlin 和 Spring Data 的样子吗?

【问题讨论】:

您是否尝试使用 MongoDB Compass 实用程序将查询转换为任何编程语言?您可以在那里加载聚合函数并将其导出到 Java。 没听说过,去看看吧。 这里是link 我知道在春天怎么做,但我不知道 kotlin。你可以在 kotlin 中使用mongoTemplate 吗?如果春天 oot 我可以回答你 @varman 是的,请用 java 写。我在 kotlin 中使用 mongotemplate :) 【参考方案1】:

你可以试试这个

public List<Object> test() 

    Aggregation aggregation = Aggregation.newAggregation(
        
        group("field")
            .sum("count").as("count")
            .addToSet("$$ROOT").as("data"),
        sort(Sort.Direction.DESC, "count"),
        limit(10),
        unwind("data")

    ).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

    return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), Object.class).getMappedResults();


【讨论】:

以上是关于将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Mongodb 聚合管道文档返回到一个文档?

mongodb 分组聚合查询

MongoDB - 聚合查询

详细教程一文参透MongoDB聚合查询

MongoDB——聚合管道之$project操作

MongoDB——聚合管道之$project操作