【问题标题】:Node.js - Mongoose/MongoDB - Model SchemaNode.js - Mongoose/MongoDB - 模型架构
【发布时间】:2015-08-18 16:11:08
【问题描述】:

我正在 Node.js 中创建一个以 mongodb 作为数据库的博客系统。

我有这样的内容:(博客文章):

// COMMENTS SCHEMA:
// ---------------------------------------
var Comments = new Schema({

    author: {
        type: String
    },
    content: {
        type: String
    },
    date_entered: {
        type: Date,
        default: Date.now
    }

});
exports.Comments = mongoose.model('Comments',Comments);
var Tags = new Schema({ 
    name: {
        type: String
    } 
});
exports.Tags = mongoose.model('Tags',Tags);


// CONTENT SCHEMA:
// ---------------------------------------
exports.Contents = mongoose.model('Contents', new Schema({

    title: {
        type: String
    },
    author: {
        type: String
    },
    permalink: {
        type: String, 
        unique: true,
        sparse: true
    },
    catagory: {
        type: String,
        default: ''
    },
    content: {
        type: String
    }, 
    date_entered: {
        type: Date,
        default: Date.now
    }, 
    status: {
        type: Number
    },
    comments: [Comments],
    tags: [Tags]

}));

我对这种类型的数据库有点陌生,我习惯于使用 LAMP 堆栈上的 MySQL。

基本上我的问题如下:

  • 将内容作者与用户关联的最佳方式是什么? 数据库?
  • 另外,标记和分类的最佳方式是什么?

在 MYSQL 中,我们将有一个标签表和一个类别表,并通过键关联,我不确定在 Mongo 中最好和最优化的方式。

感谢您的宝贵时间!!

【问题讨论】:

    标签: mongodb node.js mongoose


    【解决方案1】:

    Mongo 的一些想法:

    • 关联用户的最佳方式是电子邮件地址 - 作为内容/评论文档的属性 - 电子邮件通常是可靠的唯一键。 MongoDB 没有外键或相关约束。不过没关系。
    • 如果您有注册策略,请将用户名、电子邮件地址和其他详细信息添加到用户集合中。然后使用用户名和电子邮件对内容文档进行反规范化。如果出于任何原因,用户更改了名称,您将不得不更新所有相关的内容/cmets。但只要文档中有电子邮件地址,这应该很容易。
    • 标签和类别最好建模为内容文档中的两个列表,恕我直言。
    • 如果需要,您还可以在这些属性上创建两个索引。取决于您要提供的访问模式和 UI 功能
    • 您还可以在内容集合中添加一个包含标签列表和类别列表的文档,并使用 $addToSet 向该文档添加新的标签和类别。然后,您可以显示一个以当前标签为起点的组合框。
    • 最后一点,考虑一下您计划访问数据的方式,然后相应地设计文档、集合和索引
    • [2011 年 12 月 9 日更新] 在 MongoSv 和 Eliot(CTO 10gen)提出了与此问题相关的模式:每个用户(可能会变大)每天有一个评论文档供使用,而不是每个用户一个评论文档_id = -YYYYMMDD 甚至每月一次,具体取决于 cmets 的频率。这优化了索引创建/文档增长与文档扩散(在设计中每个用户只有一条评论的情况下)。

    【讨论】:

      【解决方案2】:
      1. 将内容作者与 MongoDB 中的用户相关联的最佳方法是在作者集合中获取一个数组,该数组保留对用户的引用。基本上是数组,因为一个内容/书籍可能有多个作者,即您需要将一个内容关联到多个用户。

      2. 类别的最佳方法是在您的数据库中创建不同的集合,并且与上述类似,在 Contents 中保留一个数组。

      我希望它至少有一点帮助。

      【讨论】:

        猜你喜欢
        • 2015-07-03
        • 2016-02-29
        • 1970-01-01
        • 2017-12-16
        • 2015-09-11
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        相关资源
        最近更新 更多