标签系统的模式

时间:2016-03-02 07:30:10

标签: mongodb meteor database-schema

我正在使用Meteor开发Web应用程序。我正在做一个标签系统,可以为主题分配零个或多个标签。 我想根据当前主题的标签在底部显示10个相关主题。我有两个模式

选项1:

主题:

{
    _id: {
        type: String,
        optional: false,
        unique: true
    },
    name: {
        type: String,
        max: 255,
        optional: false
    }
    //other fields..
}

标签:

{
    _id: {
        type: String,
        optional: false,
        unique: true
    },
    name: {
        type: String,
        max: 255,
        optional: false
    }
    //other fields..
}

TopicsTags

{
    tagId: {
        type: String,
        optional: false
    },
    topicId: {
        type: String,
        optional: false
    }
}

在此选项中,TopicsTags是包含主题和标记之间关系的联结表

选项2:

主题:

{
    _id: {
        type: String,
        optional: false,
        unique: true
    },
    name: {
        type: String,
        max: 255,
        optional: false
    },
    tags: {
       type: [String]
    }
    //other fields..
}

标签:

{
    _id: {
        type: String,
        optional: false,
        unique: true
    },
    name: {
        type: String,
        max: 255,
        optional: false
    }
    //other fields..
}

在此选项中,还有一个包含所有标记ID的附加字段。我想知道哪一个更适合根据meteor和mongodb的最常见标签查询前10个相关主题。如果你们可以指出如何查询包含所选主题标签的热门帖子的任何在线资源,那会更好。我搜索过但无法获得足够的信息。

我知道当我们向主题添加新标签时,第二种方法会很复杂,但只要读取速度很快就可以了。

修改 主要问题是哪种模式更好(或有可能)获得相关主题。例如,如果“主题1”得到“标签1”,“标签2”,“标签3”。我希望在以下偏好中获得前10个相关主题

  1. 包含所有三个标签的其他主题(“标签1”,“标签2”,“标签3”)。
  2. 如果上述标准少于10条记录,则我希望剩余记录带有两个标记((“标记1”和“标记2”)或(“标记2”和“标记3”)或(“标记1”)和标签3“)
  3. 如果以上两个标准合并的记录少于10条,那么我希望剩余的记录至少包含一个标记(“标记1”或“标记2”或“标记3”)
  4. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我会在主题文档中包含标记信息(您希望与主题一起显示)作为数组。您将阅读此信息而不是更新它。主题的标签不是经常更改的内容。