如何为自己建立的论坛创建良好的架构,以及如何正确使用子文档?

时间:2018-11-20 16:15:35

标签: node.js mongodb mongoose

关于猫鼬的问题。

所以我想建立一个论坛。我写下了我要如何构造它的注释,它看起来像这样(注意mongoose.id不是实际的东西,就像一条评论一样):

const topicGroupSchema = {
  _id: mongoose.id,
  title: String,
  topics: [topicSchema]
};

const topicSchema = {
  _id: mongoose.id,
  title: String,
  topicGroup: topicGroupSchema,
  description: String,
  latestTopic: String,
  posts: [postSchema]
};

const postSchema = {
  _id: mongoose.id,
  title: String,
  body: String,
  author: String,
  topic: topicSchema,
  createdAt: { type: Date, default: Date.now },
  replies: [replySchema]
};

const replySchema = {
  _id: mongoose.id,
  replier: String,
  createdAt: { type: Date, default: Date.now },
  text: String
};

我这样做正确吗?因此,想法是这样的:

  • 在论坛中,有许多topicGroups(例如“语言”)

  • 一个topicGroup可以有多个topic's(例如“ javascript,” C#“)

  • 一个topic可以有多个posts(例如“如何运行此代码”)

  • 一个post可以有多个replies(例如“您是否调试过吗?”)

现在让我们说一个新的帖子是在一个论坛(主题)上发表的。

我会这样创建此帖子:

const newPost = {

  title: "new post",

  body: "my text",

  author: "nice guy",

  topic: // what to put in here??? I just want to relate it to the topic it was 
  created at, or can I get rid of it entirely?,

  replies: []

}

关键问题在这里,当我已经有几个topicGroups和几个主题,并且在其中一个主题内,我创建了一条新帖子,我应该在{ {1}}模式?该主题的对象?还是我要查询这个特定主题并将新帖子推送到其post子文档中? 为什么我需要posts模式中的topic键,还是我需要它?

我认为我可能会需要它,因为当我这样做时,我可以查询特定的帖子,并询问猫鼬与之相关的post,对吧?

我这样做完全是错误的,还是要知道什么?当然,我阅读了所有的猫鼬文档,但是对我来说仍然不清楚。

0 个答案:

没有答案