2016-12-02 37 views
0

我正在嘗試構建一個小型站點,用戶可以在這裏預訂用戶進行爲期一天的演出。我現在用的帳戶從包流星,我的計劃是重視以下幾點:設計一個mongodb /流星可用性模式

user.availability: [ 
        { 
         status: n, //where n is 0-# of status types (5 atm) : single char rather than float 
         date: ddmmyyy, //string as well, no need for time as its day long 
         job_id: {Job} 
        }, ... 
        ] 

工作只是有類似的信息在哪裏,什麼,什麼時候。

有5個州:中立,可用,明確不可用,已預訂,暫掛。用戶自然是中立的,並且必須明確說明可用性。他們選擇前三個狀態:n,a,u,並且只允許在未來兩週內設置可用性。作業「提供者」是設置其他兩個可用狀態的人。對我來說一箇中立的狀態意味着他們不需要db(user.availability數組)中的記錄。

這種風格將我對下面的查詢:

db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }}); 

當用戶登錄/訪問該網站,我可以消滅他們有任何可用性設置爲早於當前日期的日期。非活動用戶的修剪間隔更長。

我認爲這個解決方案是有益的,因爲它存儲最少量的信息,需要很少的維護,可以由特定事件觸發,並且很容易查詢。但我不能100%確定這是否是利用mongodb優勢的正確方法。我會很感激這方面的任何幫助,如果有人可以指點我一篇關於優化mongodb模式的(相對)容易理解的文章,那真是太棒了。

謝謝。

+1

乍一看這似乎很好。由於您將日期保留爲字符串,因此您無法執行日期搜索,但是2周的視野並不重要。但是,一個查詢不是理想的模式。您必須考慮稍後可能會出現的其他查詢。誰上個月工作?什麼演出被取消或沒有演出?誰是演出最好的人(例如基於技能和接近度)? –

+0

我們目前的需求很多都不是基於過去,大部分記錄在當天之前被刪除。但是,新系統帶來了新的可能性,而且我肯定會想到一些可能有助於我們進行未來搜索的查詢,並查看它是否仍有可能。即使Mikkel下面的建議將它從帳戶中刪除,這應該都是有道理的。 –

回答

1

我會爲可用性創建一個單獨的集合。如果您在日期中使用MomentJS,則可以將它們以人類可讀的形式存儲,並且它們很容易搜索/排序。擴展用戶集合並不總是最好的想法,特別是如果你的子元素是需要查詢和過濾的數據數組。

您可以使用fullcalendar軟件包來顯示(天)事件 - 它可以根據您的需要顯示每月/每週/每天的觀看次數,爲您完成許多工作,並且您可以對預訂進行顏色編碼隨你便。 https://atmospherejs.com/fullcalendar/fullcalendar

+0

並將每個日期與用戶標識相關聯,或將可用日期的整個列表與用戶標識關聯? –

+1

每個可用性文檔基本上都應該包含用戶'_id'作爲外鍵。 –