Abfrage mit sort() und limit() in Spring-Repository-Schnittstelle
Ich bin neu in der Frühjahr-Daten mit MongoDB und möchte einen automatisch generierten query-Methode in meinem MongoRepository extension-Schnittstelle, die erfordert, filtern, Sortieren und begrenzen.
Die Abfrage sieht wie folgt aus:
//'created' is the field I need to sort against
find({state:'ACTIVE'}).sort({created:-1}).limit(1)
Repository-Schnittstelle sieht wie folgt aus:
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();
...
}
Ich weiß, dass man hinzufügen kann, eine Art argument, um eine query-Methode, um die Sortierung, sondern das problem ist die Begrenzung der Ergebnisse auf nur einem einzigen Objekt. Ist das möglich zu tun, ohne zu schreiben eine benutzerdefinierte JobRepositoryImpl?
Dank
Edit:
Beispiel für das, was ich Suche:
@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
oder
@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Aber dies offensichtlich nicht funktioniert 🙁
InformationsquelleAutor m1h4 | 2012-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist falsch mit:
und die, die es verwenden:
Ich war so damit beschäftigt, für einen kurzen und einfachen Abfrage-ähnliche Lösung, dass ich nicht die Mühe zu untersuchen, die Pageable-Klasse und erkennen, dass diese in Kombination mit Sort Sortieren-von wraps .sort() und .limit() Funktionen eine mongo-Abfrage.
Kein problem, froh, dass es geklappt für Sie! 🙂
Ich weiß, das ist der alte thread, aber ist es möglich zu sagen, in diesem Fall zählen nicht die Gesamtzahl der Elemente in der Auflistung, weil die Seite zurückgegeben, und Sie tun dies unter der Haube (also es sind 2 Abfragen: eine für Daten und eine für die Zählung), weiß ich über @QueryHints(forCounting = false) oder die return-Liste, anstatt der Seite, aber es funktioniert im inneren-Schnittstelle, gibt es keine alternative von @QueryHints im Fall von repository.doSomething()?
InformationsquelleAutor Oliver Drotbohm
Nur das hinzufügen einer Korrektur zu Oliver ' s Antwort, es ist
Direction.DESC
und nichtDirections.DESC
und die Reihenfolge der Parameter ist falsch.Ändern :
:
Oder Bearbeiten Sie die ursprüngliche Antwort, aber jetzt, wo ich darüber nachdenke, neue Benutzer nicht über das rep zu kommentieren ODER zu Bearbeiten.
siehe diese Diskussion auf meta, vor allem das "Bearbeiten von Code in Antworten" - Bereich. TL;DR: SO ist ein Verweis Ressource, nicht ein Spiel; die Bearbeitung wird gefördert, wenn es produziert Besserung; alle änderungen werden protokolliert und jeder kann überprüfen Geschichte.
Ich brauche eine reputaion von 50+ zu kommentieren, die Antwort wollte ich klären, so informieren Sie bitte genau, wie ich sollte, um diese Klarstellung.
Danke für den Zeiger, Mark. Habe ich behoben, durch das code-Beispiel.
InformationsquelleAutor Marc