我正在将一些代码从MS SQL移到MongoDb。在现有的SQLSERVER中,我有一个Profile表,一个Tag表和一个ProfileTag表。标签表包含所有可用标签,而ProfileTag表包含特定用户的标签。
我需要能够按标签和个人资料名称搜索个人资料。 所以,当我设计MongoDB Schema时,我还需要所有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架构的正确方法吗?
谢谢!
答案 0 :(得分:1)
根据我的经验,我认为您的方法是正确的。您不需要将Profile标记作为C#中的单独集合或类。它可以是简单的字符串数组。在mongodb架构中可能看起来像这样。在集合中,如果您的配置文件名称是唯一的,您可以将其用作_id,它将自动编入索引。 mongoDB还允许索引数组,因此您可以像标记一样对密钥进行索引,这将改进基于标记的配置文件搜索。所有通用标签都可以保存在另一个集合中。有一点,请记住,如果主标记已更新,您必须批量更新所有配置文件标记,因为它们嵌入在配置文件集合中
{_id: PROFILENAME , Tags : ["Tag1" , "Tag2" , "Tag3"] }