2012-11-20 54 views
0

我有一個JSON文件,它有40K文檔,每個文檔都包含一個日期字段。我需要在Java中用日期查詢來檢索數據,所以我以numberLong格式存儲日期。在mongodb中存儲日期的有效方法是什麼?

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。 但輸入所有這些數據後,然後當我在相同的日期自動查詢數字變化,以便我無法檢索所需日期的所有數據。我的查詢檢索是

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

爲例如:如果日期08/01/2012包含大量的文件,對於日期08月01日的正確numberlong被替換在蒙戈日期字段。這將繼續,但是在一些文件之後,這些數字會持續變化。即,如果NumberLong是2012年1月8日的日期是134353300000,那麼在6個或更多文件之後數字將與前一個不同。無法檢索日期08/01/2012的確切數據.. 這裏有什麼不同?

+0

這是*非常*不清楚你的意思是這樣的:「但是在輸入所有這些數據後,然後當我在相同的日期自動查詢數字變化,以便我無法檢索所需日期的所有數據」 - 請編輯你的問題來澄清。 –

+0

例如:如果2012年8月1日的日期包含大量文檔,則日期爲08/01/2012的正確數字在mongo的日期字段中被替換。這將繼續,但一些文件,數字不斷更改..導致無法檢索日期確切的數據08/01/2012 .. –

+0

什麼*確切*你的意思是「數字不斷變化」 ?同樣,你仍然不清楚。另外,請不要在評論中添加詳細信息 - 編輯您的問題。請閱讀http://tinyurl.com/so-hints –

回答

1

認爲看到你的問題,因爲你存儲的時候,你實際上得到與代表一天的部分使其無法查詢過去,說,午夜長整型問題的精確到毫秒。

這是因爲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,以便您正確選擇範圍。

相關問題