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中做到最好和最优化的方式。

感谢您的时间!!

  • 在MongoDB中使用两个不同的模式的populate()
  • 用mongoose处理$
  • 强制mongoose.savecallback等待写入完成
  • 用mongoose进行build筑投票的“正确方法”?
  • NodeJSasynchronouscallback不完成&呈现把手模板
  • 使用mongoose的node.js的存储库模式
  • node.js / express / mongoose noob问题
  • mongoose只返回文档的id
  • 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有一点帮助。