MongoDB中的日期查詢命令的記錄:大於、小於、等於、範圍內、(mongoVUE 操作記錄)
問題:
1,ISODate("2016-01-01T00:00:00Z"),這個是什麼日期格式。
2,mongo vue的時間型別屬性的相關查詢。包括,大於某個時間,小於某個時間,在某一段時間範圍。
3,瞭解一下mongo資料庫中儲存時間Date型別資料的祕密。
MongoDB 日期查詢目前可通過Date 和ISODate兩種方式:
1.Date方式。
例如startDate<=2012.12.7且endDate>=2012.12.7:可翻譯為
"startDate":{$lte:new Date(2012,11,7)},"endDate":{$gte:new Date(2012,11,7)}。
如下是查詢日期大於等於2016年12月1日的記錄條數(注意,中間的月份寫11,就是12月)
db.xxx.find({"updateTime" : {$gte:new Date(2016,11,1)}})
看下圖,發現,mongo vue自動給日期轉換為ISODate的格式了。
2.ISODate方式。
可以看到上面寫的方式最後也轉化為這個日期格式。
ISODate("2016-01-01T00:00:00Z")
看這個奇怪的日期格式。注意,日期後面最後個字母是Z,而我們一般debug所看到的日期是沒有這個Z的,不信我給你debug看。
UTC 通用標準時,以z來標識
mongo中的時間與China系統時間相差了8個小時,
這是因為mongo中的date型別以UTC(Coordinated Universal Time)儲存,就等於GMT(格林尼治標準時)時間。而系統時間使用的是GMT+0800時間,兩者正好相差8個小時。
下面把這個標準時間轉換成我們自己的時間。知道這個,在下面查時間範圍啥的,就好說了。
db.xxx.find({"updateTime" : {$gte:new Date("2016-11-7T01:16:33.303Z")}})
db.xxx.find({"updateTime" : {"$gte":ISODate("2013-01-17T01:16:33.303Z")}})
{"updateTime" : {"$gte":ISODate("2016-11-28T11:16:33.303Z"),"$lte":ISODate("2016-12-05T01:16:33.303Z")}}
慚愧啊,我想試試$e,這個等於某個日期點的查詢,就是沒有成功。有誰知道的話,求告知。
日後,知道了,再來更新吧。
為了測試,mongo資料庫裡面存的日期型別的資料,確實是比當前時間晚8小時,然後就新插入一條資料到資料庫,就有如下圖:
不過,你Java程式碼從資料庫取出來的時候,這個日期如果不加格式化的話,那麼你在前臺得到的時間就是一串數字,也就是那個時間所表示的毫秒數,也就是時間戳。這個我測試過了,就不上這個圖了。你可以搜尋下怎麼把時間戳,給格式化成正確時間。