mongoDB比较日期

时间:2014-08-05 06:45:44

标签: spring spring-data-mongodb

我正在使用spring mongoTemplate。我正在尝试从最小和最大日期找到出生日期。我得到的查询是

db.profile.find({ "$and" : [ { "dob" : { "$lte" : { "$date" : "2014-01-31T18:30:00.000Z"}}} , { "dob" : { "$gte" : { "$date" : "1995-01-31T18:30:00.000Z"}}}]}).pretty() 

但它没有返回任何记录。我在哪里失踪?

1 个答案:

答案 0 :(得分:1)

默认情况下,MongoDB中的所有查询都是操作,因此您不需要在此处包装$and

这也是错误的方法,你的序列化应该是这样的:

{ 
    "dob" : { 
        "$lte" : { "$date" : "2014-01-31T18:30:00.000Z"},
        "$gte" : { "$date" : "1995-01-31T18:30:00.000Z"}
    }
}

或者基本上以shell的方式:

db.collection.find({ 
    "dob" : { 
        "$lte" : new Date("2014-01-31"),
        "$gte" : new Date("1995-01-31")
    }
})

因此$lte$gte操作都属于同一个BSON元素。

查询构建器的内容如下:

    DBObject query = new Query(
        Criteria.where("dob")
            .gte(new DateTime("1995-01-31").toDate())
            .lte(new DateTime("2014-01-31").toDate())
    ).getQueryObject();