2016-08-09 12 views
1

Ich arbeite an einer WebApp mit Spring-Boot, ich bin auf der Suche nach einer Abfrage findByMonth (int oder String Monat), aber ich wäre in der Lage, zum Beispiel findByNameAndMonth (String Name, Monat) oder findByIdAndMonth() ist das möglich? Das Datum hat den Typ LocalDate.Spring Data MongoDB: Abfrage für Monat

Ich habe ein Objekt wie folgt aus:

public final class Alarm { 
    @id 
    private final String id; 
    private final String type; 
    // .... 
    private final LocalDate date; 

und seine ein mongoRepository:

public interface AlarmRepository extends MongoRepository<Alarm, String>{ 
} 

Die Abfrage soll das gleiche Ergebnis wie diese Abfrage zum Beispiel geben:

db.alarm.find({ $where : 'return this.date.getMonth() == 5'}) 
+0

ja, http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ – Palcente

+0

welcher Absatz bitte! – mahaSaez

+0

lesen Sie das Ganze ... es beginnt langsam, aber wird gegen Ende besser ... es ist nicht so lange und Sie werden es nützlich finden ... oder von JPA Repositories – Palcente

Antwort

0

LocalDate wird in MongoDB als isodate gespeichert, so ist es nicht möglich, Eigenschaften, es ist direkt zugreifen (date.month einfach nicht funktioniert und Verfahren getMonth() verwendet werden muss).

Dies verursacht, dass die Verwendung von Daten aus Spring Data ist ein bisschen schwierig. Zur Lösung Ihres Problems würde ich vorschlagen, diese Methode in Ihrem Repository zu erstellen:

List<Alarm> findByDateBetween(LocalDate from, LocalDate to); 

Aber Sie haben zu kümmern Randbedingungen (Beginn eines Monats und Ende des Monats).

Eine weitere Option ist das Speichern des Datums als einfaches Objekt und den Zugriff auf den Monat anhand seiner Eigenschaften, wie in documentation beschrieben.

0

Ja, es ist möglich. Spring Data erwartet den gleichen Variablennamen im Repository-Methodennamen. Für Beispiel: public final class Alarm { @id private final String id; private final String type; .... private final LocalDate date;

Dann sollte in Ihrem Repository der Methodenname wie folgt sein.

findByIdAndDate(String id, LocalDate date); findByIdAndType(String id, String type);

+1

Ja, ich weiß, meine Frage war, das gleiche zu tun, aber nur für den Monat nicht das ganze Datum, wie diese Abfrage ** db.alarm.find ({$ wo: 'this.date zurückgeben .getMonth() == 5 '}) ** – mahaSaez

Verwandte Themen