Spring Data MongoDB搜索ISO日期

17

我正在尝试使用查询查找出生日期

criteria = Criteria.where("dob").lte(new DateTime().toDate());

而Spring Data MongoDB 生成以下查询:

MongoTemplate:使用查询查找:

{ "dob" : { "$lte" : { "$date" : "2015-05-16T07:55:23.257Z"}}}

集合 user 中类 com.temp.model.User 的字段为 null。

但我没有得到任何结果。

我的 mongodb 中的 dob 字段:

{"dob" : ISODate("1991-01-23T00:00:00Z")}

如何在ISODate格式中搜索dob?

4个回答

9
这段代码应该可以完美地满足你的需求:
criteria = Criteria.where("dob").lte(new java.util.Date());

我有以下这段代码进行测试,它可以正常工作:

Lis<User> users = mongoOps.find(query(where("isActive").is(true).and("CreatedDate").lte(new java.util.Date())), User.class);

7

Spring Data MongoDB可以完美执行以下查询:

{ "dob" : { "$lte" : { "$date" : "2015-05-16T07:55:23.257Z"}}}.

但是在Mongo CLI中无法执行。

Mongo CLI中应该执行以下查询:

{dob:ISODate("2015-05-15T07:55:23.257Z")}

谢谢


完美地从Spring mongo Query注释中工作。 - Rémy J
如果我们正在使用JPA MongoRepository,那么在@Query注释中如何调用$date或isodate而不会出现解析异常? - user666
如果dob上有索引,它会被选中吗,因为它被翻译成$date? - mrinal

4

对于 IDE 使用 ISODate() 来将 SPRING DAO 转换为日期对象

query.addCriteria(Criteria.where("created").ne(null).andOperator(
                Criteria.where("created").gte(DateUtils.getDate("2016-04-14 00:00:00", DateUtils.DB_FORMAT_DATETIME)),
                Criteria.where("created").lte(DateUtils.getDate("2016-04-14 23:59:59", DateUtils.DB_FORMAT_DATETIME))
            ));


public final class DateUtils {    

    public static final String DB_FORMAT_DATETIME = "yyyy-M-d HH:mm:ss";        

    private DateUtils() {
        // not publicly instantiable
    }       

    public static Date getDate(String dateStr, String format) {
        final DateFormat formatter = new SimpleDateFormat(format);
        try {
            return formatter.parse(dateStr);
        } catch (ParseException e) {                
            return null;
        }
    }



} 

这个没有处理日期格式中的T和Z :( - Kanagavelu Sugumar

0
val query = Query()
query.addCriteria( 
Criteria("info.dob").gte(dob.atStartOfDay())

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