【问题标题】:Translate mongodb aggregate query into Java/Kotlin Spring Data将 mongodb 聚合查询翻译成 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 :)

标签: java mongodb spring-boot kotlin spring-data


【解决方案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();

}

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 2018-01-08
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多