【问题标题】:java mongodb search on a given datejava mongodb在给定日期搜索
【发布时间】:2013-09-05 09:33:11
【问题描述】:

我们在 mongodb 中有一个 user_audit 实体(表),它存储所有登录/注销信息。 例如,

"_id" : ObjectId("5228cf0156961de6693b74c0"),
"active" : true,
"fname" : "Tom",
"lastlogin" : ISODate("2013-09-05T18:35:45.608Z"),
"lastloginip" : "0:0:0:0:0:0:0:1",
"lname" : "Bailey",
"lastlogout" : ISODate("2013-09-05T18:36:45.568Z"),

生产中这张表有数千条记录。

现在,管理员想要查找特定日期的所有登录。由于“lastlogin”字段中附加到 ISODate 的“时间”信息,我无法查找日期的精确匹配。在 Java 中,new Date() 已用于插入此字段值。 问题是特定日期登录的时间信息不断变化。

试过了,

query.put("lastlogin", new BasicDBObject("$lte", givenDate).append("$gte", givenDate));

显然它不会返回结果,因为日期的时间部分不匹配。

从 Java 传递给 mongo 的查询是:

 query={ "lastlogin" : { "$lte" : { "$date" : "2013-09-05T04:00:00.000Z"} , "$gte" : {     
"$date" : "2013-09-05T04:00:00.000Z"}}}

[注意:如果我们在 java 中使用 MM_dd_yyyy 格式化,它总是默认为 04:00:00.000Z,不知道为什么..]

问题是我们在生产数据库中有很多记录。对于新记录,我可以在从 Java 插入之前清除时间部分。但是对于现有的记录,不知道如何处理。如何获取给定日期的记录?

【问题讨论】:

    标签: java mongodb date search


    【解决方案1】:

    根据mongodb cookbook,您的方向是正确的。您可以只查询类似

    的内容
    query.put("lastlogin", new BasicDBObject("$lt", givenDatePlusOneDay).append("$gte", givenDateAt00h00min));
    

    这是一个间隔,而不是同一个日期。

    【讨论】:

    • 知道为什么它默认为 T04:00:00.000Z 吗?
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 2015-07-01
    • 2015-03-06
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多