gpt4 book ai didi

java mongodb 在给定日期搜索

转载 作者:行者123 更新时间:2023-12-01 04:24:25 25 4
gpt4 key购买 nike

我们在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com