🔌

【Spring Boot】Spring Data MongoDBでAggregationアノテーションを使用したクエリ

2024/06/02に公開

概要

Spring Data MongoDBでAggregationのクエリを発行したい場合、Aggregation Framework SupportのようにmongoTemplateを使用した実装が挙げられますが、できればmongoTemplateを使用せずにRepositoryの機能でクエリを行いたいです。
調べてみたら、Spring Data MongoDB - Guide to the @Aggregation Annotationの記事にある通り、アノテーションでクエリを設定できる機能があるそうなので、今回はこれを試してみました。

前提

  • 使用したSpring Data MongoDBのバージョンは4.3.0です。
  • 今回はJavaでの実装を前提としています。(Kotlinでもほぼ同様の実装でいけるとは思いますが)

実装サンプル

引数で指定したuser_account_idで、レコードを絞るクエリのサンプルは下記になります。
?0の形式で参照する引数の項番が指定できます。

public interface SampleCategoryRepository extends MongoRepository<SampleCategoryDocument, String> {
    @Aggregation(
            pipeline = {
                    "{ '$match': { 'user_account_id': ?0 } }",
                    "{ '$project': {" +
                            " '_id': 1, " +
                            " 'name': 1, " +
                            " 'parent_category_id': 1, " +
                            " 'memo': 1" +
                            " } }",
            }
    )
    public List<SampleCategoryAggregation> getSampleCategoryListAggregate(String userAccountId);
}

Discussion