2016-08-09 4 views
1

Я работаю над webApp с Spring-boot, я ищу, чтобы создать запрос findByMonth (int или String month), но я хотел бы иметь возможность использовать, например, findByNameAndMonth (String имя, месяц) или findByIdAndMonth() это возможно? Дата имеет тип LocalDate.Данные Spring MongoDB: запрос за месяц

У меня есть объект вроде этого:

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

и сво mongoRepository:

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

Запрос должен дать тот же результат, как этот запрос, например:

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

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

+0

какой пункт пожалуйста! – mahaSaez

+0

прочитал все это ... он начинает медленно, но становится лучше к концу ... это не так долго, и вы найдете его полезным ... или начать с репозиториев JPA – Palcente

ответ

0

LocalDate хранится в MongoDB, как ISODate, так что это не возможно, чтобы получить доступ к его свойства напрямую (date.month просто не работает и метод getMonth() должен быть использован).

Это приводит к тому, что использование дат из Spring Data немного затруднительно. Для того, чтобы решить вопрос, который я хотел бы предложить, чтобы создать этот метод в хранилище:

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

Но вы должны заботиться о граничных условиях (начало месяца и конец месяца).

Другой вариант - хранить дату как простой объект и месяц доступа по его свойствам, как описано в documentation.

0

Да, это возможно. Spring Data ожидает одно и то же имя переменной в имени метода репозитория. Например: public final class Alarm { @id private final String id; private final String type; .... private final LocalDate date;

Затем в вашем репозитории имя метода должно быть следующим.

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

+1

Да, я знаю, что мой вопрос состоял в том, чтобы сделать то же самое, но всего за месяц не всю дату, как этот запрос ** db.alarm.find ({$ where: 'return this.date .getMonth() == 5 '}) ** – mahaSaez

Смежные вопросы