🔌
【Spring Boot】Spring Data MongoDBでAggregationアノテーションを使用したクエリ
概要
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