spring-data-mongodb上的TopN聚合

eh57zj3b  于 2023-05-28  发布在  Go
关注(0)|答案(1)|浏览(227)

我正在尝试使用spring-data-mongo实现一个带有TopN聚合运算符的分组,但我不知道该如何实现。
我知道我想从MongoDB的POV中得到什么。大概是这样的

[ { 
    $match: { 
      field000: { $regex: ".*MATCHTHIS.*" }, 
      created: { $lte: new Date("2030-05-25T00:00:00.000+00:00" ) } 
    }, 
  }, 
  { 
     $group: { 
       _id: "$field001", 
       field001s: { 
         $topN: { 
           output: ["$field002", "$created"], 
           sortBy: { created: -1, }, 
           n: 1, 
         }
       }
     }
    }]

对于已经由$match子句过滤的文档集,表示...; group by field 001,按照创建的desc对每个bucket进行排序,并选择顶部(1)。因此,每个组类别的最近创建的文档。
我发现将其翻译成spring-data-mongo有问题

klh5stk1

klh5stk11#

使用MongoRepository,您可以使用@Aggregate注解指定管道。就像这样:

@Aggregation(pipeline = {"{ $match: { field000: { $regex: '?0' }, created: { $lte: '?1' } },}, { $group: { _id: '$field001', field001s: { $topN: { output: ['$field002', '$created'], sortBy: { created: -1, }, n: 1}}}}"})
Object filterAndGroup(String regex, ZonedDateTime created);

注意,我已经参数化了搜索正则表达式和日期值。请相应地更新它,沿着函数的返回类型。

相关问题