2014-03-02 47 views
3

我正在玩一個小型網絡應用程序來存儲每天的任務和時間,並在每週和每月的報告中報告。在MongoDb中存儲時間(小時:分鐘)的最佳方式是什麼?

對於我的後端,我想與MongoDb一起工作,但無法立即找到最佳方式來存儲花在任務上的時間。 我沒有興趣存儲實際的時間範圍(開始和結束日期),只是在幾小時內花費的時間:分鐘。

由於我將製作每週和每月報告,所以我需要能夠按周,按月計算總和。

店鋪花費的時間最好的方法是什麼?

我傾向於只是存儲在一個32位整數的量分鐘和其轉換爲小時:分鐘在客戶端上。 (或者更好的是,已經轉換它在MongoDB中聚集查詢,如果可能的話?)

我的任務文件應該是這樣的,然後

{ 
    "task_id": { 
     "$oid": "5311a0a4e4b0386017fce592" 
    }, 
    "timeEntry_date": "ISODate('2014-03-02')", 
    "timeSpent_minutes": 30 
} 

這是MongoDB中要走的路?

很抱歉,如果我在這裏說明的明顯,剛開始學習有關MongoDB的...

+0

在此之前,溶解到一個「意見爲本」的討論,事情,我在這裏看到的一個是,這種信息只會是最適合你的作品。如果你可以在你的問題中提出一些**使用案例**,那麼它實際上就像詢問你所做的是否最適合那些「使用案例」。否則,有些人只是在抨擊意見的答案,以嘗試**並獲得代表。這就是我們在這裏想要避免的。 –

回答

2

一如既往有關MongoDB「這取決於你的使用情況」。在MongoDB中,您應該構建「模式」,以便描述您的應用程序需求而不是數據結構。

如果你的應用程序是寫密集的,你應該有一個非常快速和簡單的寫程序。例如,你可以存儲毫秒花了,然後做了計算上閱讀

如果你希望你的應用程序能夠更快讀取,你可以有類似

time_spent: { 
    hours: 1, 
    minutes: 23, 
    seconds: 45 
} 

文檔中

PS我認爲

"task_id": { 
     "$oid": "5311a0a4e4b0386017fce592" 
} 

會更好,因爲

task_id: "5311a0a4e4b0386017fce592" 
+1

我認爲$ oid實際上是ObjectId的內部屬性 – Sammaye

1

根據所述的要求,最好通過將數據作爲數值提供服務。有很多查詢和聚合運算符可以輕鬆用於數字值,而不是其他幾個可用的選項。

雖然您可以將句點存儲爲字符串,但它需要始終爲零填充才能正確排序。使用字符串,您只能有效地進行完全匹配和範圍查詢(例如,查找所有"0030""0015""0045")。

同時您還可以存儲開始和結束時間,並嘗試計算期間,它增加了不必要的複雜的查詢,而實際上可能使某些類型的唯一可能使用聚合框架查詢。根據您的需求,您可能會發現一些有趣的想法here

其中時間長度被直接存儲爲值,而不是計算的任何選項之間的絕對性能差異是不太可能是可測量的,因爲它們會消耗近的每個選項空間相同的量。如果你關心絕對磁盤空間的使用情況,我建議你考慮使用較短的字段名稱。每個文檔都包含完整的字段名稱。 Mongo的一些驅動程序爲字段名稱提供了一種方便的方法(通過保留用於代碼友好的名稱並在存儲的文檔中使用縮寫版本)。

我會與存儲最適合的時候,你會遇到的最大長度的整數值去。如果頻繁查詢,可以添加索引,並可以輕鬆地將其轉換爲更人性化的內容。

相關問題