2013-12-11 103 views
0

我正在將一些代碼從MS SQL移到MongoDb。在現有的SQLSERVER中,我有一個Profile表,一個Tag表和一個ProfileTag表。標籤表包含所有可用的標籤,ProfileTag表包含特定用戶的標籤。3個表的MongoDB架構設計

我需要能夠通過標籤以及配置文件名稱搜索配置文件。 所以當我設計MongoDB架構時,我是否還需要所有3個類,或者我可以從列表中刪除ProfileTag?我仍然試圖將自己的頭圍繞文檔設計。

public class Tag { 

} 

public class Profile { 
    public Address Address {get;set;} 
    public List<Education> EducationList {get;set;} 
    public List<Tag> ProfileTags {get; set;} 
} 

這是設計MongoDB架構的正確方法嗎?

謝謝!

回答

1

根據我的經驗,我認爲你的方法是在正確的方向。您不需要Profile標籤作爲單獨的集合或C#中的類。它可以是簡單的字符串數組。在mongodb模式中可能看起來像這樣。在集合中,如果您的配置文件名稱是唯一的,您可以將其用作_id,這將自動編入索引。 mongoDB還允許索引數組,以便您可以像標籤一樣對鍵進行索引,這將改進基於標籤的配置文件搜索。所有通用標籤都可以保存在另一個集合中。有一點你必須記住,在主代碼的情況下被更新,你必須批量更新所有配置文件標籤,因爲它們被嵌入的曲線收集在

 {_id: PROFILENAME , Tags : ["Tag1" , "Tag2" , "Tag3"] } 
+0

謝謝,是保持檔案文檔外的標籤文件好主意 ?這意味着在其中添加一個ProfileTag表和一個profileId。用戶可以添加或刪除標籤,但他永遠不會更新主標籤。 – user636525

+0

@ user636525如果您將個人資料標籤保留在個人資料收藏集外,請務必進行兩次數據庫調用,以使用他/她的標籤向個人資料用戶顯示。這也取決於你要做什麼樣的查詢。 – Devesh