gpt4 book ai didi

java - 在 mongodb 中存储日期的有效方法是什么?

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

我有一个包含 40k 文档的 JSON 文件,每个文档都包含一个日期字段。我需要在 Java 中查询日期来检索数据,因此我以 numberLong 格式存储日期。

Date dt = new Date();
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
dt = format.parse(nextLine[j]);
document.put(ColumnNameAsKey[j], dt.getTime());

上面的代码是在 API 中的 for 循环中完成的,用于将数据存储到 mongo。但是在输入所有这些数据之后,然后当我查询同一日期的 numberlong 更改时,我将无法检索所需日期的所有数据。我要检索的查询是

querygraph.put("Complaint Date (MM/DD/YYYY)", new 
BasicDBObject("$gte",startdate.getTime()).append("$lte",EndDate.getTime()));

例如:如果日期 08/01/2012 包含大量文档,则日期 08/01/2012 的正确数字将在 mongo 的日期字段中替换。这将继续,但在一定数量的文档之后,numberlong不断变化..即如果日期08/01/2012的NumberLong是134353300000,那么在6个或更多文档之后,numberlong将与前一个不同..导致无法检索日期 08/01/2012 的准确数据。这里有什么不同?

最佳答案

认为看到了你的问题,因为你存储了毫秒精度的时间,你实际上遇到了代表一天中部分时间的长整数的问题,使得无法查询过去的时间,比如午夜。

这是因为 MongoDB 查询不考虑这种上下文查询。

首先提示,不要存储为数字长整型,仅使用以下行存储为 $date BSON 类型:

Date dt = new Date();
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");

使用指定的 BSON 日期类型您将获得更多功能,并且查询能力全面相同。

您对查询记录的想法是正确的:

querygraph.put("Complaint Date (MM/DD/YYYY)", new 
BasicDBObject("$gte",startdate.getTime()).append("$lte",EndDate.getTime()));

但我有一种感觉,你做错了什么。创建开始日期和结束日期时,您实际上是在查找开始日期的 00:00:00 时间和结束日期的 23:59:59 时间。结束日期。这是由于您的 getTime() 函数所致,UNIX 时间戳不会返回部分时间,因此它只会返回默认值,即有效的 now()

一种可以让您的生活更轻松的方法是标准化此字段上的时间,以便您为所有日期指定 00:00:00 时间,以便您正确选择范围。

关于java - 在 mongodb 中存储日期的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13467556/

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