ReactiveMongoRepository中的本机查询

时间:2019-06-21 14:52:26

标签: mongodb spring-boot mongodb-query

是否有一种方法可以在ReactiveMongoRepository中执行本地查询,例如使用@Query注释的JpaRepository?喜欢这个:

public interface MyRepository extends JpaRepository<MyClass, Long> {
@Query(value= "SELECT id FROM my_table ORDER BY RAND() LIMIT 1" , nativeQuery = true)
public Long getRandomData();
}

这是我要执行的查询:

db.airportControl.aggregate([
  { "$match": {
    "$and": [
      { "$expr": { "$eq": [{ "$year": "$boardingDate" }, 2019] }},
      { "airportDestiny": "MAD"}
    ]
  }},
  { "$group": {
    "_id": null,
    "average": {
      "$avg": { "$subtract": ["$boardingDate", "$securityGateDate"] }
    }
  }}
]);

1 个答案:

答案 0 :(得分:0)

检查以下内容:https://docs.spring.io/spring-data/mongodb/docs/current-SNAPSHOT/reference/html/#mongodb.repositories.queries.json-based

这: https://docs.spring.io/spring-data/mongodb/docs/current-SNAPSHOT/reference/html/#mongodb.repositories.queries.aggregation

public interface PersonRepository extends CrudReppsitory<Person, String> {

  @Aggregation("{ $group: { _id : $lastname, names : { $addToSet : $firstname } } }")
  List<PersonAggregate> groupByLastnameAndFirstnames();                            

  @Aggregation("{ $group: { _id : $lastname, names : { $addToSet : $firstname } } }")
  List<PersonAggregate> groupByLastnameAndFirstnames(Sort sort);                   

  @Aggregation("{ $group: { _id : $lastname, names : { $addToSet : $?0 } } }")
  List<PersonAggregate> groupByLastnameAnd(String property);                       

  @Aggregation("{ $group: { _id : $lastname, names : { $addToSet : $?0 } } }")
  List<PersonAggregate> groupByLastnameAnd(String property, Pageable page);        

  @Aggregation("{ $group : { _id : null, total : { $sum : $age } } }")
  SumValue sumAgeUsingValueWrapper();                                              

  @Aggregation("{ $group : { _id : null, total : { $sum : $age } } }")
  Long sumAge();                                                                   

  @Aggregation("{ $group : { _id : null, total : { $sum : $age } } }")
  AggregationResults<SumValue> sumAgeRaw();                                        

  @Aggregation("{ '$project': { '_id' : '$lastname' } }")
  List<String> findAllLastnames();                                                 
}

这些用于Spring Data Mongo,但它们也应应用于ReactiveMongoRepository,因为:

  1. 反应性MongoDB存储库

本章描述了对MongoDB的反应式存储库支持的特殊性。本章以[repositories]中解释的核心存储库支持为基础。您应该对这里介绍的基本概念有一个很好的了解。