MongoDB RESTful API структурирование - PullRequest
0 голосов
/ 24 мая 2018

Итак, я пытаюсь создать RESTful API, который работает аналогично reddit, где есть пользователи, темы (subreddits), посты и комментарии.Для этого я пытаюсь использовать Node.js и MongoDB.

Это пока репозиторий github: https://github.com/edmassarani/reddit-clone

Единственная проблема в том, что я не знаю, как структурироватьудаление документов и их «зависимостей», поскольку пользователь может владеть темой, в этой теме есть сообщения, в этих сообщениях есть комментарии, а в комментариях есть авторы, поэтому как мне удалить пользователя, не оставляя темы без владельца илипост без темы и так далее?Было бы проще, если бы я использовал реляционную базу данных?

1 Ответ

0 голосов
/ 24 мая 2018

Я вижу в вашем репозитории Github, что вы структурировали свои модели, как в реляционной базе данных (примечание: вы назвали реляционную базу данных «базой данных SQL» по вашему вопросу) с нормализованными моделями данных :

Пример: в Topic.js вы ссылаетесь на сообщения со ссылкой:

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

Это, безусловно, работает так же, но с NoSQL и особенно с MongoDB у вас есть возможность встроить документы в другой документ.

Почему бы не встраивать схему сообщений непосредственно в тему, как это:

  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',
        },
      ],
    },
  ],

Как я понимаю, если тема удалена, все сообщения, связанные с этой темой, должны быть удалены.

Со встроенной схемой у вас есть только одно удаление.

Я не знаю, является ли в вашем контексте встроенное решение лучшим решением (из-за perfs), но у вас есть два решения:

  • Используйте другую схему (файлы моделей), и вы должны вручную удалить ее в каскадном режиме (например: при удалении темы вы должны найти все ссылки на сообщения в теме a).и удалите их ...)
  • Рефакторинг и вставка: удаление темы также удаляет комментарии.

См. Официальные документы mongodb для получения дополнительной информации о встроенной схеме: https://docs.mongodb.com/manual/core/data-model-design/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...