Spring Data MongoDB 教程

存储库对排序规则支持

MongoDB 存储库通过 @Query 注解的 collation 属性支持排序规则。

示例:存储库的排序规则支持

public interface PersonRepository extends MongoRepository<Person, String> {

   @Query(collation = "en_US")  // (1)
   List<Person> findByFirstname(String firstname);

   @Query(collation = "{ 'locale' : 'en_US' }") // (2)
   List<Person> findPersonByFirstname(String firstname);

   @Query(collation = "?1") // (3)
   List<Person> findByFirstname(String firstname, Object collation);

   @Query(collation = "{ 'locale' : '?1' }") // (4)
   List<Person> findByFirstname(String firstname, String collation);

   List<Person> findByFirstname(String firstname, Collation collation); // (5)

   @Query(collation = "{ 'locale' : 'en_US' }")
   List<Person> findByFirstname(String firstname, @Nullable Collation collation); // (6)
}

其中:

(1)静态排序规则定义,将导致 { 'locale' : 'en_US' }。

(2)静态排序规则定义,将导致 { 'locale' : 'en_US' }。

(3)动态排序规则取决于第二个方法参数,允许的类型包括字符串(例如:“en_US”)、Locacle(例如:Locacle.US)和Docuemnt(例如:new Document("locale", "en_US"))。

(4)动态排序规则取决于第二个方法参数。

(5)将排序规则方法参数应用于查询。

(6)排序规则方法参数将覆盖默认排序规则,如果不是 null,则 @Query。

注意:如果为存储库查找器方法启用了自动索引创建,则在创建索引时将包括潜在的静态排序规则定义,如 (1) 和 (2) 所示。

为了简化整个代码库中排序规则属性的使用,还可以使用 @Collation 注解,它作为上述注解的元注解。另外,直接使用 @Collation 将取代在 @Query 和其他注解上定义的任何排序值。这意味着,如果排序规则是通过 @Query 和 @collation 声明的,那么将从 @collation 中选择一个排序规则。

示例:使用 @Collation 注解

// 替代 @Document(collation=…)
@Collation("en_US")
class Game {
   // ...
}

interface GameRepository extends Repository<Game, String> {

   // 替代 @Query(collation=…)
   @Collation("en_GB")
   List<Game> findByTitle(String title);

   // 优先使用 @Collation 排序规则
   @Collation("de_AT")
   @Query(collation="en_GB")
   List<Game> findByDescriptionContaining(String keyword);
}
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号