Mongo Java按日期查询
生活随笔
收集整理的這篇文章主要介紹了
Mongo Java按日期查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近需要使用java讀取mongodb的數據,在使用日期查詢時需要返回無查詢結果。
數據庫樣本如下:
部分原代碼如下:
BasicDBObject query= new BasicDBObject("uloadDate", new BasicDBObject("$gte", "2020-08-25").append("$lt", "2020-08-30")); List<GridFSDBFile> gridFSDBFiles = gridFS.find(query);運行后無任何結果,顯示為空,query對象構造如下::
{ "Time" : { "$gte" : { "$date" : "2020-08-25" }, "$lt" : { "$date" : "2020-08-30" } } }在經過多番查詢后,找到原因如下:$date表示只是Java驅動程序中日期的toString表示。它使用嚴格的JSON/BSON表示,而不是擴展的10genbson,其中值可以像在shell中一樣表示對象。不應該嘗試在shell中使用這樣的toString輸出進行查詢,因為它在很多情況下都不起作用。
也嘗試過將日期轉成其他對象:
Date startDate = new java.util.Date(2020, 8, 25, 00, 00); Date endDate = new java.util.Date(2020, 8, 30, 00, 00); BasicDBObject query= new BasicDBObject("uploadDate", new BasicDBObject("$gte", startDate).append("$lt", endDate)); List<GridFSDBFile> gridFSDBFiles = gridFS.find(query);其query對象內容如下:
{ "uploadDate" : { "$gte" : { "$date" : 61559107200000 }, "$lt" : { "$date" : 61559539200000 } } }結果也是什么都沒輸出。此問題經過查詢后發現,java.util.Date(year,month,day)這個構造函數中year是超出1900的年數,所以需要減去1900;month從0開始,所以需要減去1,這些問題都容易被忽略。這里我沒有減去1900,因此數據庫查不到未來的數據內容,因此輸出為空。
修正后代碼如下,使用該查詢可以返回查詢結果,由于可能年和日期修正容易被忽略,造成查詢問題,這里推薦用方法一。
方法一:
方法二:
int startYear =2020, endYear = 2020; int startMonth = 8, endMonth = 8; int startDay = 25, endDay = 30; BasicDBObject query= new BasicDBObject("uploadDate", new BasicDBObject("$gte", new Date(startYear - 1900 , startMonth - 1, startDay)).append("$lt", new Date(endYear -1900, endMonth - 1, endDay)));方法三:
Date startDate = new java.util.Date(2020 - 1900, 8 - 1, 25, 00, 00); Date endDate = new java.util.Date(2020 - 1900, 8 - 1, 30, 00, 00); BasicDBObject query= new BasicDBObject("uploadDate", new BasicDBObject("$gte", startDate).append("$lt",endDate));參考文章:
MongoDB Query by Date in Java[closed]
Java/MongoDB query by date
如何在Java中對MongoDB按日期進行查詢統計
總結
以上是生活随笔為你收集整理的Mongo Java按日期查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南师范大学2018年大学生程序设计竞赛
- 下一篇: Deepin笔记本WIFI速度过慢问题