アノテーションインターフェース Aggregation


Aggregation アノテーションを使用すると、Repository クエリメソッドにアノテーションを付けて、呼び出し時に pipeline() を実行することができます。

パイプラインステージは、field マッピングを考慮して Repository ドメイン型に対してマップされ、単純なプレースホルダー ?0 と SpelExpressions が含まれる場合があります。

クエリメソッド Sort および Pageable 引数はパイプラインの最後に適用されるか、パイプラインの一部として手動で定義できます。

導入:
2.2
作成者:
Christoph Strobl
  • 要素の詳細

    • value

      @AliasFor("pipeline") StringSE[] value
      pipeline() のエイリアス。適用する集計パイプラインを定義します。
      戻り値:
      デフォルトでは空の配列です。
      関連事項:
      デフォルト:
      {}
    • pipeline

      @AliasFor("value") StringSE[] pipeline
      適用する集計パイプラインを定義します。
      
      // aggregation resulting in collection with single value
      @Aggregation("{ '$project': { '_id' : '$lastname' } }")
      List<String> findAllLastnames();
      
      // aggregation with parameter replacement
      @Aggregation("{ '$group': { '_id' : '$lastname', names : { $addToSet : '$?0' } } }")
      List<PersonAggregate> groupByLastnameAnd(String property);
      
      // aggregation with sort in pipeline
      @Aggregation(pipeline = {"{ '$group': { '_id' : '$lastname', names : { $addToSet : '$?0' } } }", "{ '$sort' : { 'lastname' : -1 } }"})
      List<PersonAggregate> groupByLastnameAnd(String property);
      
      // Sort parameter is used for sorting results
      @Aggregation("{ '$group': { '_id' : '$lastname', names : { $addToSet : '$?0' } } }")
      List<PersonAggregate> groupByLastnameAnd(String property, Sort sort);
      
      // Pageable parameter used for sort, skip and limit
      @Aggregation("{ '$group': { '_id' : '$lastname', names : { $addToSet : '$?0' } } }")
      List<PersonAggregate> groupByLastnameAnd(String property, Pageable page);
      
      // Single value result aggregation.
      @Aggregation("{ '$group' : { '_id' : null, 'total' : { $sum: '$age' } } }")
      Long sumAge();
      
      // Single value wrapped in container object
      @Aggregation("{ '$group' : { '_id' : null, 'total' : { $sum: '$age' } } })
      SumAge sumAgeAndReturnAggregationResultWrapperWithConcreteType();
      
      // Raw aggregation result
      @Aggregation("{ '$group' : { '_id' : null, 'total' : { $sum: '$age' } } })
      AggregationResults<org.bson.Document>> sumAgeAndReturnAggregationResultWrapper();
      
      戻り値:
      デフォルトでは空の配列です。
      デフォルト:
      {}
    • collation

      @AliasFor(annotation=Collation.class, attribute="value") StringSE collation
      集計を実行するときに適用する照合を定義します。
      // Fixed value
      @Aggregation(pipeline = "...", collation = "en_US")
      List<Entry> findAllByFixedCollation();
      
      // Fixed value as Document
      @Aggregation(pipeline = "...", collation = "{ 'locale' :  'en_US' }")
      List<Entry> findAllByFixedJsonCollation();
      
      // Dynamic value as String
      @Aggregation(pipeline = "...", collation = "?0")
      List<Entry> findAllByDynamicCollation(String collation);
      
      // Dynamic value as Document
      @Aggregation(pipeline = "...", collation = "{ 'locale' :  ?0 }")
      List<Entry> findAllByDynamicJsonCollation(String collation);
      
      // SpEL expression
      @Aggregation(pipeline = "...", collation = "?#{[0]}")
      List<Entry> findAllByDynamicSpElCollation(String collation);
      
      戻り値:
      デフォルトでは空の StringSE です。
      デフォルト:
      ""
    • readPreference

      @AliasFor(annotation=ReadPreference.class, attribute="value") StringSE readPreference
      使用する読み取り設定のモード。この属性 (@Aggregation(pipeline = {... }, readPreference = "secondary")) は次の別名です。
      @@Aggregation(pipeline = { ... })
      @ReadPreference("secondary")
      List<PersonAggregate> groupByLastnameAnd(String property);
      
      戻り値:
      インデックス名。
      導入:
      4.2
      関連事項:
      デフォルト:
      ""