Spring数据mongodb搜索ISO日期

时间:2015-05-16 08:14:37

标签: java spring mongodb spring-data-mongodb

我正在尝试使用查询

搜索出生日期
{ "dob" : { "$lte" : { "$date" : "2015-05-16T07:55:23.257Z"}}}

Spring数据mongodb生成以下查询:

  

MongoTemplate:使用查询查找:

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

fields:null for class:class com.temp.model.User in collection:user

但我没有得到任何结果。

我在mongodb的dob字段:

<div ng-repeat="list in statusList | orderBy:myValueFunction">

如何以ISODate格式搜索 dob

4 个答案:

答案 0 :(得分:6)

查询将从Spring数据mongodb0执行完美

  

{“dob”:{“$ lte”:{“$ date”:“2015-05-16T07:55:23.257Z”}}}。

但它不会从mongo CLI执行。

查询在cli上执行。

  

{DOB:ISODate( “2015-05-15T07:55:23.257Z”)}

由于

答案 1 :(得分:5)

此代码应该可以满足您的需求:

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);

答案 2 :(得分:2)

对于IDE,使用ISODate()进行SPRING DAO将字符串转换为Date对象

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;
        }
    }



} 

答案 3 :(得分:0)

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