文章的猫鼬模式

Nik*_*ing 2 mongoose mongodb node.js mongoose-schema pug

我正在建立一个新闻网站,我有这个猫鼬模式:

let mongoose = require('mongoose');

let articleSchema = mongoose.Schema({
  image1:{
    type: String,
    required: true
  },
  title:{
    type: String,
    required: true
  },
  author:{
    type: String,
    required: true
  },
  date:{
    type: String,
    required: true
  },
  updated:{
    type: String,
    default: 'not updated'
  },
  title_nd:{
    type: String,
    required: false
  },
  body:{
    type: String,
    required: true
  },
  comments: [commentsSchema],
  likes:{ type:Number, default:0 }
});

let Article = module.exports = mongoose.model('Article', articleSchema);

Run Code Online (Sandbox Code Playgroud)

我想添加一个表单,以便用户可以添加他们的评论。问题是如何为评论创建新架构并将其链接到文章架构,然后如果用户添加评论,则评论添加到数据库,然后显示在文章评论部分?

Jee*_*eet 5

以我的拙见,为单独的注释模式建模并不是一个好主意,因为这是一个经典案例,one to few mapping它是嵌入文档的理想用例。为了让您对数据建模有一个基本的了解,我在这里引用

您需要考虑两个因素:

  • One-to-N 中“N”侧的实体是否需要独立存在?
  • 关系的基数是什么:是一对多吗?一对多;或一对squillions?

根据这些因素,您可以选择三种基本的一对 N 模式设计之一:

  • 如果基数是一对数并且不需要在父对象的上下文之外访问嵌入的对象,则嵌入 N 端
  • 如果基数是一对多或者 N 端对象出于任何原因应该独立,则使用对 N 端对象的引用数组
  • 如果基数是一对 squillions,则使用对 N 侧对象中的一侧的引用

请参阅MongoDB 架构设计的 6 条经验法则:第 1 部分来自 mongodb 博客的一篇写得非常好的文章。

即使在此之后,如果您认为链接到另一个模式是个好主意,请参考这个 SO 问题 -在 Mongoose 中引用另一个模式