2013-12-11 72 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