2012-02-16 182 views
3

字符串類型日期這是我在MongoDB中查詢的MongoDB中

db.order.find ({"ublExtensions.ublExtensions.extensionContent.Metadata 
       .ModificationTime": "2012-02-04T01:58:27.861Z"}); 

它獲取的結果只在特定時間段查詢。修改時間每天都在變化。我有一個要求,我需要選擇更新的數據,每天...意味着(sql中的sysdate -1)一天的數據。

如何在mongodb中實現這個功能?請注意我的日期是一個字符串類型,我有一個約束,我不能改變它。有人建議使用ISODate。

請幫忙解決這個問題。

+0

Im相當肯定你唯一的解決方法是將遍歷每個文檔和轉換日期字符串轉換爲日期,以便您可以正確測試它。 Mongo只把它看作一個字符串。有什麼方法可以在文檔更新時存儲另一個適當的日期字段?那麼你可以簡單地查詢UTC中的所有內容 – jdi 2012-02-16 16:11:04

+0

在mongo中是否有任何日期轉換函數,就像我們在sql中有to_char,to_date一樣? – user1214124 2012-02-16 16:56:50

+0

無論如何,我們可以使用ISODate,Date()或new Date()作爲sysdate-1使用它 – user1214124 2012-02-16 16:57:47

回答

7

MongoDB中存儲的BSON格式的日期對象,如:{$日期:1329415205151}

如果你決定將其存儲在一個字符串格式,那麼它是客戶端的責任來過濾和處理該值因爲mongo把它當作一個字符串來對待。您可以通過參考另一個SO問題將字符串轉換爲日期對象:How do I convert a property in MongoDB from text to date type?

已被廣泛推薦將UTC中的所有日期或可能與本地數據中心相關的一致時區一起存儲,然後將其轉換爲日期值轉換爲客戶端上適當的本地時區。

您可以存儲您想要的任何日期值。日期的和日期的格式是兩個單獨的問題。如果您的約束要求您將該基於字符串的日期格式存儲在文檔中,則建議還要在更新時存儲$ date對象。

+0

謝謝jdi ....讓我檢查一下客戶端。 – user1214124 2012-02-17 14:10:15

+0

@jdi你可以看看我在這篇文章中的回答,並告訴我,如果我錯了。 – 2017-11-11 12:15:55

5

我會建議您存儲日期作爲MongoDB的日期或ISODate,因爲它會減輕你的生活:)

如果不能,則在客戶端(編程語言特定的驅動程序),你應該能夠解析字符串轉換爲適用的日期類型。

>var today = new Date(); 
>today 
ISODate("2012-11-26T22:12:03.870Z") 
>var yesterday = new Date() 
>yesterday.setDate(today.getDate() - 1) 
>yesterday 
ISODate("2012-11-25T22:12:03.870Z") 

但是,如果您需要查詢,以便對蒙戈外殼程序運行時,可使用在Mongo Cookbook

1)創建與今天的日期和昨天的日期變種描述遵循類似的策略2)形成一個查詢24小時週期

>db.order.find({ "ublExtensions.ublExtensions.extensionContent.Metadata.ModificationTime" : { $gte : yesterday, $lt : today } }) 
0

內查找文檔爲什麼你就不能使用$gt查詢和比較恬E可以使用Date.now()並從Date.now()您可以使用以前的日期一樣,如果當前的日期是"2017-05-16T02:08:48.419+05:30"那麼你將編寫查詢

db.collection.find({"createdAt": { $gte : new ISODate("2017-05-15T02:08:48.419+05:30") }}) 
+1

這基本上正是@Ghasfarost在他的回答中所說的,除非他的回答是建議將日期存儲爲日期對象而不是字符串。這個答案忽略了這樣一個事實,即他們首先必須被存儲爲日期查詢的工作日期。該操作說,將它們存儲爲字符串是一個他們不能放棄的約束。 – jdi 2017-11-11 20:33:38

+0

@jdi謝謝,我的壞我只是沒有閱讀@ Ghasfarost的全部答案。 – 2017-11-12 12:33:44