Spring Data MongoDB:查询月份

时间:2016-08-09 12:10:24

标签: spring spring-data-mongodb

我正在使用Spring-boot进行webApp,我希望创建一个查询findByMonth(int或String month),但我希望能够使用例如findByNameAndMonth(String name,month)或findByIdAndMonth( ) 可能吗? 日期有LocalDate类型。

我有一个像这样的对象:

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'})

2 个答案:

答案 0 :(得分: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 :(得分:0)

LocalDate作为ISODate存储在MongoDB中,因此无法直接访问它的属性(date.month无效并且必须使用方法getMonth() )。

这导致使用Spring Data中的日期有点棘手。为解决您的问题,我建议您在存储库中创建此方法:

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

但是你必须处理边界条件(月初和月末)。

另一种选择是将日期存储为普通对象,并按照documentation中的描述在其属性中访问月份。