2012-08-07 22 views
0

說我在MongoDB中有兩個集合,一個是包含用戶基本信息的用戶,另一個是包含應用程序的應用程序。如果允許用戶添加應用程序,那麼當用戶下次登錄時,Web應該讓用戶爲他們添加應用程序,我應該在MongoDB中構建這種類型的數據庫。如何用mongodb構建這個數據庫?

users:{_id:ObjectId(),username:'username',password:'password'} 
apps:{_id:ObjectId(),appname:'',developer:,description:}; 

我應該如何爲用戶添加應用程序?我應該添加類似addedAppId一樣:

users:{_id:ObjectId(),username:'username',password:'password',addedApppId:[]} 

,表示他們已經添加了應用程序,然後開始使用addedAppId的應用???

回答

1

是的,users集合跟蹤用戶添加的應用程序沒有任何問題,就像您指出的那樣。

這就是在MongoDB中被稱爲linking。在關係系統中,您可能會創建一個單獨的表,added_apps,它具有用戶ID,應用程序ID和任何其他相關信息。但由於您無法加入,因此將這些信息保存在users集合中是完全合適的。

the docs

設計MongoDB的架構時的一個關鍵問題是,當嵌入以及何時鏈接。嵌入是在BSON文檔中嵌套對象和數組。鏈接是文檔之間的引用。

MongoDB中沒有連接 - 在1,000個服務器集羣上分佈式連接會很困難。嵌入有點像「預加入」的數據。文檔中的操作對於服務器來說很容易處理;這些操作可能相當豐富。 對比鏈接必須由應用程序處理客戶端;應用程序通過發出後續查詢來完成此操作。

(這是用戶的存儲AppId你需要從做,獲取應用程序信息的額外位。)

一般來說,對於「包含」實體之間的關係,嵌入應該是選擇。不使用鏈接時使用鏈接會導致數據重複。

...

多對多關係通常是通過鏈接來完成。

+0

thanx man it really really help – paynestrike 2012-08-07 02:05:34