簡體   English   中英

Java和MongoDB查詢日期范圍

[英]Java & MongoDB query for date range

在開始之前,我已經搜索了這個問題的答案,而我能想到的最佳答案是這個問題。

我有一個區別。 我有一個表,其中包含許多文檔的歷史記錄。 因此,我需要查詢ID以及日期范圍。 這是我的查詢當前在Java中的外觀

BasicDBObject searchQuery = new BasicDBObject();

searchQuery.put("id", id);
searchQuery.put("dateModified", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());

DBCursor cursor = table.find(searchQuery);

這將不返回任何結果。 此代碼塊生成的MongoQuery如下所示:

db.history.find({ "id" : 12345 , "dateModified" : { "$gte" : { "$date" : "2015-01-19T00:00:00.000Z"} , "$lte" : { "$date" : "2015-01-25T00:00:00.000Z"}}});

當我在MongoDB命令行中手動鍵入此命令時,也不會返回任何結果。 我目前在數據庫中有一條記錄用於測試,如下所示:

{
    "id" : NumberLong(12345),
    "dateModified" : ISODate("2015-01-21T19:42:28.044Z")
}

該對象應該與查詢明確匹配,但是什么也沒有返回,有什么想法嗎?

編輯 :因此事實證明,查詢對象生成的字符串與數據庫中的ISODate對象不匹配。 我想澄清一下fromDate和toDate都是java.util.Date對象。 我仍然不確定如何解決這個問題。

我發現了問題。 我不了解原因,但是問題在於BasicDBObjectBuilder沒有正確使用Date對象。 我切換到QueryBuilder並構建了完全相同的查詢,並返回了結果。

fromDate必須是Date類型,而不是String表示形式。 MongoDB存儲引擎中的ISODate不等於相同日期的String表示,因此它們不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM