使用 gte 和 lte 查询未在 mongodb 中获得准确结果

Not getting accurate result in mongodb using gte and lte query

这是我在mongodb

中的usercollection
{
    "_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 那么它必须包括也等于的日期。比如,当我将日期从 12 月 16 日传递到 2 月 8 日时,它会给出所有 users创建日期为 2 月 16 日至 7 日。不包括创建日期为 2 月 8 日的 user,当我从 12 月 16 日到 2 月 9 日时,它包括 2 月 8 日 user.Is 我做错了什么我 confuse.Please 帮助。 谢谢你。

你不会得到这个结果

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") 日期相等但不相等 time.Overall 您的用户日期不在您的范围内。Mongo 它检查日期和时间都相等。

您可以拥有的一个解决方案是在您的应用程序端使用 org.apache.commons.lang.time(Apache Commons Lang) 中的 DateUtils 添加额外的时间 24*60*60 - 1 到此 Date createdDate

DateUtils.addSeconds(createdDate,24*60*60-1);

重要假设您将仅在请求中发送日期。您必须添加上面的代码来预处理您的请求对象但是当您插入。每当请求到来时,添加这段 code.It 就可以正常工作