我正在嘗試構建一個小型站點,用戶可以在這裏預訂用戶進行爲期一天的演出。我現在用的帳戶從包流星,我的計劃是重視以下幾點:設計一個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模式的(相對)容易理解的文章,那真是太棒了。
謝謝。
乍一看這似乎很好。由於您將日期保留爲字符串,因此您無法執行日期搜索,但是2周的視野並不重要。但是,一個查詢不是理想的模式。您必須考慮稍後可能會出現的其他查詢。誰上個月工作?什麼演出被取消或沒有演出?誰是演出最好的人(例如基於技能和接近度)? –
我們目前的需求很多都不是基於過去,大部分記錄在當天之前被刪除。但是,新系統帶來了新的可能性,而且我肯定會想到一些可能有助於我們進行未來搜索的查詢,並查看它是否仍有可能。即使Mikkel下面的建議將它從帳戶中刪除,這應該都是有道理的。 –