在一個新項目中,我決定使用mongodb作爲主數據庫,但是由於缺乏經驗,導致我在如何構建不同集合之間的關係時出現混淆。MongoDB中的關係
在我來說,我有一個用戶收藏,一個「註釋」集合和一個組集合。註釋可以對不同的用戶和組開放。如果用戶是組的一部分,並且該組具有對該筆記的讀取權限,則用戶也是如此。如果用戶從組中移除,則他們不再有權訪問該筆記。但是,用戶可以以用戶的身份訪問筆記,即使他們從具有訪問權限的組中移除,仍可以看到筆記。希望這是有道理的。
我面對的是建立權限,以便所有這一切都是可能的問題。權限是否應該存儲在筆記集合中?如果它存儲的如下:
note: {id: xxxx, followers:[{id:user1, permission:write},{id:groupA, permission:read}]}
然後在一個user2的是A組的一部分的情況下,我需要檢查,看看他們是否與通過其ID的節點相關聯,如果沒有,我會檢查每個可以看到該註釋並查看其成員的組,並且如果不同的組具有不同的權限,則必須獲得最高權限。這看起來效率不高。
的用戶集合看起來是這樣的:
user: {id:user1, projects:[xxxxx, xxxxx], groups:[xxxxx,xxxx...]}
Groups集合:
group: {id:groupA, projects:[xxxxx, xxxx...], users:[user2...]}
我打算聯同項目和用戶文件組的文件,這樣,如果組將被刪除從一個項目中,該項目將從該組中移除。這似乎是一個dbref是最好的方式來做到這一點。
我已經看過最佳實踐,我覺得我的整體結構是混亂的,但我想不出另一種方式來做到這一點。
是否有一個原因,用戶可以不只是一人組? – Derick 2012-03-14 09:16:45
用戶登錄後,兩個集合將會有完全不同的字段。我僅將該示例僅限於權限的相關信息。我不認爲有用戶作爲一個羣體會限制必要的,我如何設置權限,因爲我仍然會檢查每個組檢查的量。 – aelnaiem 2012-03-14 22:24:46
你的查詢是什麼樣的?你是否更經常地搜索特定的筆記以查看哪些組和用戶有權訪問它,或者查找特定的組或用戶以查看哪些筆記有權訪問? – Barrie 2012-03-19 15:12:07