Soy nuevo en Spring Data con MongoDB y me gustaría tener un método de consulta generado automáticamente en mi interfaz de extensión de MongoRepository que requiere filtrado, clasificación y limitación.Consulta con sort() y limit() en la interfaz Spring Repository
La consulta se parece a esto:
// 'created' is the field I need to sort against
find({state:'ACTIVE'}).sort({created:-1}).limit(1)
La interfaz del repositorio tiene el siguiente aspecto:
public interface JobRepository extends MongoRepository<Job, String> {
@Query("{ state: 'ACTIVE', userId: ?0 }")
List<Job> findActiveByUserId(String userId);
// The next line is the problem, it wont work since
// it's not in the format @Query expects
@Query("find({state:'ACTIVE'}).sort({created:-1}).limit(1)")
Job findOneActiveOldest();
...
}
Sé que se puede añadir un argumento clasificar a un método de consulta a fin de obtener la clasificación, pero el problema es limitar los resultados a un solo objeto. ¿Es posible hacerlo sin tener que escribir un JobRepositoryImpl personalizado?
Gracias
Editar:
ejemplo de lo que estoy buscando:
@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
o
@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Pero esto, obviamente, no funciona :(
Gracias Oliver, esto es exactamente lo que estaba buscando. – m1h4
Estaba tan ocupado buscando una solución de consulta simple y corta que no me molesté en examinar la clase Pageable y me di cuenta de que esto, en combinación con Sort, envuelve las funcionalidades .sort() y .limit() de una consulta mongo. – m1h4
¡No hay problema, me alegro de que funcionó para ti! :) –