Node.js – Mongoose / MongoDB – 模型模式

我正在用mongodb作为db在Node.js中创build一个博客系统。

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

// 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] })); 

我对这种types的数据库有一点新意,我在LAMP堆栈上用于MySQL。

基本上我的问题如下:

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

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

感谢您的时间!!

Mongo的几个想法:

  • 关联用户的最佳方式是电子邮件地址 – 作为内容/评论文档的属性 – 电子邮件通常是可靠的唯一密钥。 MongoDB没有外键或相关的约束。 但是那很好。
  • 如果您有注册策略,请将用户名,电子邮件地址和其他详细信息添加到用户集合中。 然后用用户名和电子邮件去规范内容文档。 如果由于某种原因用户更改了名称,则必须更新所有相关的内容/评论。 但只要电子邮件地址在文件中,这应该很容易。
  • 在内容文件,恕我直言,标签和类别最好build模为两个列表。
  • 如果需要,您也可以在这些属性上创build两个索引。 取决于您要提供的访问模式和UIfunction
  • 您还可以在内容集合中添加一个保存标签列表和类别列表的文档,并使用$ addToSet为该文档添加新的标签和类别。 然后,您可以以当前标签显示combobox作为起点。
  • 作为最后一点,请考虑您计划访问数据的方式,然后相应地devise文档,收集和索引
  • [更新12/9/11]在MongoSv和Eliot(CTO 10gen)提出了一个与这个问题相关的模式:每个用户(可能会变大)的一个评论文档每天都有一个评论文档,用于使用_id = -YYYYMMDD甚至每月一次,具体取决于评论的频率。 这优化了索引创build/文档增长与文档扩展(在每个用户有一个评论的情况下)。
  1. 将内容作者与MongoDB中的用户相关联的最佳方法是在Author Collection中保存对User的引用的数组。 基本上数组,因为一个内容/书可能有多个作者,即您需要将一个内容关联到许多用户。

  2. 类别的最佳方法是在您的数据库中创build一个不同的集合,并与上面类似地在内容中保存一个数组。

我希望至less有一点帮助。