MongoDB RESTful API结构

时间:2018-05-24 16:40:36

标签: javascript node.js mongodb rest

所以,我正在尝试创建一个类似于reddit的RESTful API,它有用户,主题(subreddits),帖子和评论。为此,我正在尝试使用Node.js和MongoDB。

到目前为止,这是github回购:https://github.com/edmassarani/reddit-clone

唯一的问题是我不知道如何构建文档的删除和它的“依赖”,因为用户可能拥有一个主题,该主题有帖子,那些帖子有评论,那些评论有作者,所以怎么会我要删除一个用户而不留下没有所有者的主题或没有主题的帖子等等?如果我使用关系数据库会更容易吗?

1 个答案:

答案 0 :(得分:1)

我可以在你的Github回购中看到,你的模型就像在关系数据库中一样(注意:你将关系数据库命名为' SQL数据库'在你的问题上)规范化数据模型

示例: 在Topic.js中,您可以参考帖子:

posts: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Post',
    },
  ],

它肯定会像它一样工作,但是使用NoSQL,特别是MongoDB,您可以将文档嵌入到另一个文档中。

为什么不将Post模式直接嵌入到Topic中:

  posts: [
    {

    title: {
        type: String,
        required: true,
      },
      body: {
        type: String,
        required: true,
      },
      ...
      upvotes: [
        {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'User',
        },
      ],
      comments: [
        {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'Comment',
        },
      ],
    },
  ],

据我所知,如果删除主题,则必须删除与此主题相关的所有帖子。

使用嵌入式架构,您只能进行一次删除。

我不知道在您的上下文中嵌入是否是最佳解决方案(因为perf),但您有两个解决方案:

  • 使用不同的架构(您的模型文件),您必须手动 在级联中删除(例如:当您删除主题时,您必须 找到所有帖子引用到主题并删除它们......)
  • 重构并嵌入:使用它,删除主题也会删除评论。

有关嵌入式架构的更多信息,请参阅mongodb官方文档:https://docs.mongodb.com/manual/core/data-model-design/