Ich habe eine Abfrage mit Pageable:Paginierung mit mongoTemplate
Query query = new Query().with(new PageRequests(page, size))
Wie kann ich es mit MongoTemplate ausführen? Ich sehe keine einzige Methode, die Page<T>
zurückgibt.
Ich habe eine Abfrage mit Pageable:Paginierung mit mongoTemplate
Query query = new Query().with(new PageRequests(page, size))
Wie kann ich es mit MongoTemplate ausführen? Ich sehe keine einzige Methode, die Page<T>
zurückgibt.
MongoTemplate
hat keine Methoden zur Rückgabe Page
. Die find()
Methoden geben einen gewöhnlichen List
zurück.
with(new PageRequests(page, size)
intern anzupassen skip
und limit
mit MongoDB Abfrage (ging durch eine Zählung Abfrage Ich denke)
Page
kann verwendet werden, in Verbindung mit MongoDB repositories verwendet, die ein Spezialfall von Spring Data Repositories ist.
So müssen Sie MongoRepository
Page findAll(Pageable pageable)
für paginierte Ergebnisse verwenden (tatsächlich von PagingAndSortingRepository
vererbt).
Es stimmt, dass die MongoTemplate
keine mit Pageables hat.
Aber Sie können das Spring Repository PageableExecutionUtils
dafür verwenden.
In Ihrem Beispiel würde es so aussehen:
Pageable pageable = new PageRequests(page, size);
Query query = new Query().with(pageable);
List<XXX> list = mongoTemplate.find(query, XXX.class);
return PageableExecutionUtils.getPage(
list,
pageable,
() -> mongoTemplate.count(query, XXX.class));
Wie im Original Spring Data Repository, das PageableExecutionUtils
wird eine Zählung Antrag tun und es in eine schönes Page
Sie einpacken.
Here können Sie sehen, dass der Frühling das gleiche tut.
Basierend auf d0x Antwort und Blick auf die spring code. Ich verwende diese Variante, die von der Spring-Boot-Starter-Data-Mongodb-Abhängigkeit ausgeht, ohne Spring-Data-Commons hinzufügen zu müssen.
@Autowired
private MongoOperations mongoOperations;
@Override
public Page<YourObjectType> searchCustom(Pageable pageable) {
Query query = new Query().with(pageable);
// Build your query here
List<YourObjectType> list = mongoOperations.find(query, YourObjectType.class);
long count = mongoOperations.count(query, YourObjectType.class);
Page<YourObjectType> resultPage = new PageImpl<YourObjectType>(list , pageable, count);
return resultPage;
}
und wo ist die Klasse PageableExecutionUtils? –
From Spring Daten commons: https://github.com/spring-projects/spring-data-commons/blob/master/src/main/java/org/springframework/data/repository/support/PageableExecutionUtils.java – d0x
Ok, Vielen Dank. Ich habe eine ältere Version des Frühlings benutzt. –