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