2016-07-15 115 views
1

我們有一個簡單的應用程序,我們讓所有的用戶在同一個時區&因此我們不希望在mongo日期對象中存儲時區信息。MongoDB - 沒有時區的存儲日期

這樣一個極端步驟的原因是我們有多個使用由不同開發人員管理的通用數據庫的微服務。他們每個人都需要在查詢&中明確設置與時區相關的東西,將相同的結果遺忘在無效數據集中。

由於目前MongoDB的鄉親Mongo Data Types

不支持存儲日期沒有時區。

只是急切地想知道這是他們的代表沒有日期的時區蒙戈任何替代方法,通過它我們可以仍然能夠利用蒙戈數據庫查詢的日期基礎語法,如日期範圍,日期等

在同時,DBA的閱讀和管理記錄也很方便。

回答

0

看看這個答案:https://stackoverflow.com/a/6776273/6105830

您可以使用兩種類型的長表示(毫秒或格式YYYYMMDDHHMMSS)中。這些是不存儲時區並且仍然能夠進行範圍查詢的唯一方法。

不幸的是你失去了一些聚合屬性。但是你可以做一些事情,比如保留兩個表示並在適當的時候使用它們。

+0

嗯我在發佈問題之前檢查了這個帖子。這種方法的問題在於它們都使人們無法讀取日期。因此,以前可以直接在控制檯上執行的任何DBA操作都需要使用一些轉換包裝器將人類可讀的值轉換爲int值,反之亦然。從而導致不同的問題。 – tarunkumar

+0

我不認爲格式yyyyMMddHHmmss是不可讀的haha 但是對於你的問題,我認爲你可以做的另一種方式(也許只有一種)是在查詢中存儲時區和減去/添加時區偏移量,就像這個聚合(在Java中): { 「$項目」:{ 「日期」:{ 「$加」: 「$日」, TimeZone.getDefault()的getOffset(System.currentTimeMillis的()) 。 ] } } } –

+0

oopss可能是我對yyyyMMddHHmmss的錯誤理解,我假設存儲與int/long相同的只與提取的值相同。是的,我認爲即使對於範圍查詢,它也可以很好地工作,儘管我們需要編寫一些我們需要忽略年份的自定義正則表達式。另外我也會嘗試你的第二個建議的解決方案。 – tarunkumar