Sono nuovo di Spring Data con MongoDB e vorrei avere un metodo di query generato automaticamente all'interno della mia interfaccia di estensione MongoRepository che richiede il filtraggio, l'ordinamento e la limitazione.Interrogazione con sort() e limit() nell'interfaccia Spring Repository
La query si presenta così:
// 'created' is the field I need to sort against
find({state:'ACTIVE'}).sort({created:-1}).limit(1)
L'interfaccia repository assomiglia a questo:
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();
...
}
So che si può aggiungere un argomento Ordina a un metodo di query al fine di ottenere l'ordinamento, ma il problema è limitare i risultati a un singolo oggetto. È possibile farlo senza dover scrivere un JobRepositoryImpl personalizzato?
Grazie
Edit:
esempio di quello che sto cercando:
@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
o
@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Ma questo, ovviamente, non funziona :(
Grazie Oliver, questo è esattamente quello che stavo cercando. – m1h4
Ero così occupato alla ricerca di una soluzione di query semplice e breve che non mi preoccupassi di esaminare la classe Pageable e rendermi conto che questo in combinazione con Sort sort-of avvolge le funzionalità .sort() e .limit() di una query mongo. – m1h4
Nessun problema, felice ha funzionato per te! :) –