我一直在圍繞在mongodb中存儲推文,每一個對象看起來像這樣: html
{ "_id" : ObjectId("4c02c58de500fe1be1000005"), "contributors" : null, "text" : "Hello world", "user" : { "following" : null, "followers_count" : 5, "utc_offset" : null, "location" : "", "profile_text_color" : "000000", "friends_count" : 11, "profile_link_color" : "0000ff", "verified" : false, "protected" : false, "url" : null, "contributors_enabled" : false, "created_at" : "Sun May 30 18:47:06 +0000 2010", "geo_enabled" : false, "profile_sidebar_border_color" : "87bc44", "statuses_count" : 13, "favourites_count" : 0, "description" : "", "notifications" : null, "profile_background_tile" : false, "lang" : "en", "id" : 149978111, "time_zone" : null, "profile_sidebar_fill_color" : "e0ff92" }, "geo" : null, "coordinates" : null, "in_reply_to_user_id" : 149183152, "place" : null, "created_at" : "Sun May 30 20:07:35 +0000 2010", "source" : "web", "in_reply_to_status_id" : { "floatApprox" : 15061797850 }, "truncated" : false, "favorited" : false, "id" : { "floatApprox" : 15061838001 }
我將如何編寫查詢來檢查created_at並查找18:47到19:00之間的全部對象? 我是否須要更新文檔,以便以特定格式存儲日期? python
我按照個人要求在此模型中嘗試過,之後須要建立對象時,我須要存儲一個日期,我想檢索個人html文件中兩個日期之間的全部記錄(文檔),我使用的是如下格式mm / dd / yyyy jquery
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script> //jquery $(document).ready(function(){ $("#select_date").click(function() { $.ajax({ type: "post", url: "xxx", datatype: "html", data: $("#period").serialize(), success: function(data){ alert(data); } ,//success }); //event triggered });//ajax });//jquery </script> <title></title> </head> <body> <form id="period" name='period'> from <input id="selecteddate" name="selecteddate1" type="text"> to <input id="select_date" type="button" value="selected"> </form> </body> </html>
在個人py(python)文件中,我按照如下方式將其轉換爲「 iso fomate」 web
date_str1 = request.POST["SelectedDate1"] SelectedDate1 = datetime.datetime.strptime(date_str1, '%m/%d/%Y').isoformat()
並以「 SelectedDate」做爲個人收藏集中的字段保存在個人dbmongo收藏中 ajax
檢索我在如下查詢中使用的兩個日期之間的數據或文檔 mongodb
db.collection.find( "SelectedDate": {'$gte': SelectedDate1,'$lt': SelectedDate2}})
將日期塞入Mongo時,將日期轉換爲GMT時區。 這樣,永遠不會存在時區問題。 而後,當您拉回數據進行演示時,只需對twitter / timezone字段進行數學計算便可。 mongoose
澄清。 重要的是要知道: ide
這是一個有效的代碼段,咱們在其中進行了一些日期操做以確保Mongo(這裏我正在使用mongoose模塊,並但願其date屬性小於(做爲myDate參數指定的日期的)日期的行的結果)可以處理它正確: post
var inputDate = new Date(myDate.toISOString()); MyModel.find({ 'date': { $lte: inputDate } })
在
MongoDB Cookbook中
查詢日期範圍(特定月或日)
對此問題有很好的解釋,可是下面是我本身嘗試過的方法,它彷佛能夠工做。 url
items.save({ name: "example", created_at: ISODate("2010-04-30T00:00:00.000Z") }) items.find({ created_at: { $gte: ISODate("2010-04-29T00:00:00.000Z"), $lt: ISODate("2010-05-01T00:00:00.000Z") } }) => { "_id" : ObjectId("4c0791e2b9ec877893f3363b"), "name" : "example", "created_at" : "Sun May 30 2010 00:00:00 GMT+0300 (EEST)" }
根據個人實驗,您將須要將日期序列化爲MongoDB支持的格式,由於如下內容會帶來不但願的搜索結果。
items.save({ name: "example", created_at: "Sun May 30 18.49:00 +0000 2010" }) items.find({ created_at: { $gte:"Mon May 30 18:47:00 +0000 2015", $lt: "Sun May 30 20:40:36 +0000 2010" } }) => { "_id" : ObjectId("4c079123b9ec877893f33638"), "name" : "example", "created_at" : "Sun May 30 18.49:00 +0000 2010" }
在第二個示例中,沒有預期的結果,可是仍然有一個結果。 這是由於完成了基本的字符串比較。
按照http://bsonspec.org/#/specification的規定,MongoDB實際上將日期的毫秒數存儲爲int(64)。
可是,當您檢索日期時,它將變得很是混亂,由於客戶端驅動程序將使用其本身的本地時區實例化日期對象。 mongo控制檯中的JavaScript驅動程序確定會這樣作。
所以,若是您關心本身的時區,請確保在知道時區時知道該怎麼辦。 對於查詢來講,這可有可無,由於它仍然等同於相同的int(64),不管您的日期對象位於哪一個時區(我但願)。 可是我絕對會使用實際的日期對象(而不是字符串)進行查詢,而後讓驅動程序執行其操做。