java mongodb 在给定日期搜索

标签 java mongodb date search

我们在 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",给定日期).append("$gte",给定日期));

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

从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 插入之前清空时间部分。但对于已有的记录,不知道如何处理。如何获取给定日期的记录?

最佳答案

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

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

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

关于java mongodb 在给定日期搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18632706/

相关文章:

java - 我们可以使用 jaxws-rt.jar 作为运行时实现,尽管它包含 sun 库吗?

mongodb - 在 Mongoose 对象上创建锁

c# - 找不到类型或 namespace MongoServer

java - 在apachecamel中将多个消息路由到同一个流

java - Spring Data JPA,当我尝试选择DistinctValue时出错

node.js - mongodb 客户端 + Node.js

date - JQgrid 在客户端按特定格式对日期进行排序

ios - 如何在 Swift 中更改一周的第一天

javascript - 谷歌应用脚​​本: parsing strings as Date objects

java - 我可以将按钮放入微调器中吗