Flakelf
@Flakelf

Как структурировать базу данных?

Доброго времени суток.

В учебных целях пилю урезанный аналог инстаграма, встал вопрос о правильном проектировании базы данных.

У меня есть модель User:

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    login: {
        type: String,
        lowercase: true,
        trim: true,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    cookie: String,
    regDate: { type: Date, default: Date.now },
    avatarPath: String,
    closed: {
        type: Boolean,
        default: false
    },
    email: { type: String, required: true },
    followersCount: Number,
    followingCount: Number,
    followers: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    ],
    following: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    ]
}, { versionKey: false });

module.exports = mongoose.model('User', UserSchema);


У каждого пользователя есть свои посты, как в инстаграме, схема поста выглядит следующим образом

const mongoose = require('mongoose');

const Post = new mongoose.Schema({
    imgLink: String,
    likes: {type: Number, default: 0},
    commentsCount: {type: Number, default: 0},
    comments: [{
        type: String,
        ref: 'User',
        date: Date.now,
        comment: String
    }]
})

module.exports = Post;


Вопрос о том, как связать пользователя с постами, словом, чтобы у каждого пользователя в базе данных был массив объектов с постами, а у постов массив объектов с комментариями.
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
Вот тут описано: https://docs.mongodb.com/manual/core/data-model-design/

Вам подойдет более прицельно: https://docs.mongodb.com/manual/tutorial/model-ref...
и https://mongoosejs.com/docs/populate.html

вкратце - вам надо у поста сделать ссылку на автора, комментарии сделать отдельным документом, и в нем ссылку на пост, потом все это можно собирать например через populate в mongoose, чтобы загружать в массив постов для пользователя и массив комментариев для поста.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы