有没有办法为 Java 或 Kotlin
@Query
类中的 MongoRepository
方法添加限制?
我的查询基本上如下,我试图看看是否有一种方法可以将限制放入此级别的查询中,而不是稍后在服务层中处理它。
@Query("{'area': { \$eq: ?0 }, \$and: [ /*some other logic*/ ]}, sort: {'dateUploaded': -1}, limit: ?1")
fun findLatestUploads(area: String, limit: Int): List<AudioFile>
上面的代码实际执行,但不限制它为我在测试时放置的
limit = 5
值。
在 Spring Data MongoDB 中,
@Query
注释不直接支持 limit
参数作为查询字符串的一部分。但是您可以通过相应地重命名该方法来将返回的结果限制为所需的数量。例如。如果你想检索前 5 个结果,你可以这样命名方法。 Spring Data 遵循约定优于配置的方法,即从方法名称解释所需的结果。
interface AudioFileRepository : MongoRepository<AudioFile, String> {
fun findTop5ByAreaOrderByDateUploadedDesc(area: String): List<AudioFile>
}
记下方法名称
findTop5ByAreaOrderByDateUploadedDesc
。
但是,此方法显然将结果数量限制硬编码为 5。如果您想动态执行此操作,唯一的选择是通过创建
PageRequest
对象在服务层中执行此操作。