在Spring Data MongoDB存储库中如何查询日期?

13

我的领域对象 -

Person{
    String name;
    Date born;
}

我有一个PersonRepository

PersonRepository{
    @Query(value="{'born': {$gt: new Date(?0)} }")
    findPerson(Date bornAfter);
}

我正试图获取所有在某个日期之后出生的人的信息。但是操作似乎不能成功。我缺少了什么?在mongodb控制台中,“born”字段的日期格式看起来像:

ISODate("2011-11-16T09:46:33.750Z")

我试图在data-jpa源码中寻找一个单元/集成测试,但没有找到。有人能指导我吗?

2个回答

12

首先,您必须确保在这里不要混淆Spring Data JPA和Spring Data MongoDB。我认为问题的任何部分实际上都没有针对一些JPA内容。以下是您的Repository可能看起来像:

public interface PersonRepository extends Repository<Person, Long> {

  // Query generated from the method name
  List<Person> findByBornGreaterThan(Date born);

  @Query("{'born' : { '$gt' : ?0 }}")
  List<Person> findPersons(Date born);
}

对于1.0.1.RELEASE,后者不起作用,我已经为此创建了一个ticket,并已经在即将发布的版本1.0.2.RELEASE和1.1.0.M1中修复了它。所以你可能想要获取快照版本来尝试一下。我还创建了一个ticket,以添加BeforeAfter到支持的关键字中,以比当前允许的LessThanGreaterThan更直观地使用。


3
对不起,我错误地引用了JPA。我正在使用Spring Data MongoDB。然而,你提出的解决方案并不奏效。这是它生成的查询语句 { "born" : { "$gt" : "Fri Nov 18 18:05:07 PST 2011"}},但是它没有返回任何结果,而实际上应该有结果。我正在使用显式的@Query形式。此外,集成测试中没有关于日期测试的示例。 - sample11234
很好的发现。我已经创建了一些工单来捕获这个错误,并相应地编辑了答案。 - Oliver Drotbohm
我在互联网上找了很久,但却找不到的一件事是@Aggregation可以像这个答案中的那样使用Date参数。也许对未来的开发人员有用。 - tiempo

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接