使用gte和lte查询得不到mongodb的准确结果

时间:2016-03-02 10:06:16

标签: mongodb spring-data-mongodb

这是我在mongodb中的user集合

{
    "_id" : NumberLong(104060),
    "age" : 41,
    "username" : "appubhai75@gmail.com",
    "roles" : [
        "ROLE_USER"
    ],
    "firstName" : "Apurva",
    "lastName" : "Shah",
    "email" : "appubhai75@gmail.com",
    "createdDate" : ISODate("2016-02-08T12:23:02.001Z"),
}

我正在使用这样的标准

criteria = new Criteria().orOperator(name, email)
            .andOperator(genderCriteria).and("_id").ne(id).and("createdDate").gte(startDate).lte(endDate);

当我通过startdateenddate时:

Start date is::2015-12-16T00:00:00.000+05:30
end date is::2016-02-08T00:00:00.000+05:30

user未来,但当我将enddate更改为

end date is::2016-02-09T00:00:00.000+05:30
然后它即将到来。  如果我使用gtelte,那么它必须包含等于的日期。就像,当我将日期从16 dec传递到8 feb时,它会给出所有users创建日期为16到7个月。不包括user创建日期8 feb,当我通过16 dec到9 feb然后它包括8 feb user.Is我做错了什么我很困惑。请帮助。 谢谢。

1 个答案:

答案 0 :(得分:2)

你不会得到这个

的结果
Start date is::2015-12-16T00:00:00.000+05:30
end date is::2016-02-08T00:00:00.000+05:30

检查创建日期user ISODate("2016-02-08T12:23:02.001Z")日期是否相等但不是时间。总的来说,您的用户日期不在您的范围内。全部检查日期和时间是否相等。

您可以拥有的一个解决方案是在您的应用程序端使用24*60*60 - 1 Date createdDate DateUtils中的org.apache.commons.lang.time向此DateUtils.addSeconds(createdDate,24*60*60-1); 添加额外时间a= ['and', 'people', 'them', 'become', 'treat', 'is', 'they', 'see', 'the', 'way', 'you', 'what'] b= [3, 6, 4, 6, 5, 2, 4, 3, 3, 3, 3, 4]

b

重要假设您只会在请求中发送日期。您必须添加上述代码以预先处理您的请求对象,但不能在插入时。当有任何请求时来添加这段代码。它会正常工作