【问题标题】:MongoDB Schema design with 3 tables带有 3 个表的 MongoDB Schema 设计
【发布时间】:2013-12-11 13:09:31
【问题描述】:

我正在将一些代码从 MS SQL 移动到 MongoDb。在现有的 SQLSERVER 中,我有一个 Profile 表、一个 Tag 表和一个 ProfileTag 表。标签表包含所有可用的标签,而 ProfileTag 表包含特定用户的标签。

我需要能够按标签和配置文件名称搜索配置文件。 因此,当我设计 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 架构的正确方法吗?

谢谢!

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    根据我的经验,我认为您的方法是正确的。在 C# 中,您不需要将 Profile 标记作为单独的集合或类。它可以是简单的字符串数组。在 mongodb 模式中可能看起来像这样。在集合中,如果您的个人资料名称是唯一的,您可以将其用作_id,它将自动被索引。 mongoDB 还允许对数组进行索引,以便您可以对标签等键进行索引,这将改进基于标签的配置文件搜索。所有通用标签都可以保存在另一个集合中。有一点你要记住,如果主标签被更新,你必须批量更新所有的配置文件标签,因为它们嵌入在配置文件集合中

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

    【讨论】:

    • 谢谢,将标签文档保留在 Profile 文档之外是个好主意吗?这意味着添加一个带有 profileId 的 ProfileTags 表。用户可以添加或删除标签,但他永远不能更新主标签。
    • @user636525 如果您将个人资料标签保留在个人资料集合之外,您将不得不进行两次数据库调用以向个人资料用户显示他/她的标签。这还取决于您要进行哪种查询。
    猜你喜欢
    • 2017-08-29
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多