[유튜브 클론코딩] 3.4 Comment Model

2021. 3. 2. 18:37Projects/유튜브 클론코딩

728x90
반응형

3.4 Comment Model

Comment model 만들기

models > Comment.js 만든다.

import mongoose from "mongoose";

const CommentSchema = new mongoose.Schema({

    text:{

        type: String,

        required : "Text is required"

    },

    createdAt : {

        type: Date,

        default : Date.now

    }   

});

const model = mongoose.model("Comment",CommentSchema);

export default model;

↑ Comment.js

스키마를 만들고 그 스키마를 가지고 모델을 만든다.

이것을 init.js에다가 import 해준다.

 

Relationship - 데이터간의 관계

그 다음에 할 것은 데이터의 관계에 대한 것이다.

한 쪽에서 video를 생성하고 다른 쪽에서 comment를 생성했을 때 둘을 어떻게 연관시킬까?

둘 사이에 어떠한 관계가 있는데, 이걸 어떻게 연관시킬까?

방법은 두가지가 있다.

 

1. comment에 video id 넣기

import mongoose from "mongoose";

const CommentSchema = new monggose.Schema({

    text:{

        type: String,

        required : "Text is reauired"

    },

    createdAt : {

        type: Date,

        default : Date.now

    },

    

    video:{

        type: mongoose.Schema.Types.ObjectId,

        ref: "Video"

    }

});

const model = mongoose.model("Comment",CommentSchema);

export default model;

↑ Comment.js

comment는 video와 연결되어 있다.

 

* type: 이 video의 type은 mongoose.Schema.Types.ObjectId이다. ObjectID는 비디오가 만들어지면 자동으로 생성된다.

* ref:  어떤 object ID가 어느 model에서 온건지를 알려줘야하므로 ref에 Video라는 이름을 넣어주어야 한다.(Video는 Video.js에서 만든 model 이름이었음)

(reference:참조)

 

기본적으로 데이터베이스에는 Video : 1 이런식으로 저장될 것이다.

즉, mongoose에게 ID 1에 해당하는 Video를 가져와달라고 말하는 것이다.

 

2. 다른 방법: video에 comment id array 넣기  → 나는 여기서 이걸 사용하겠음

 

이번에는 object ID들의 array를 생성해야한다.

import mongoose from "mongoose";

const VideoSchema = new mongoose.Schema({

    fileUrl: {

        type: String,

        required: 'File URL is required'

    },

    title : {

        type: String,

        required : "Title is required"

    },

    description : String,

    views:{

        type: Number,

        default: 0

    },

    createdAt : {

        type: Date,

        default: Date.now

    },

    comments: [{

        type: mongoose.Schema.Types.ObjectId,

        ref: "Comment"

    }]

});

const model = mongoose.model("Video", VideoSchema);

export default model;

↑ Video.js

 

결론

이렇게 두 가지 선택지가 있다.

  • Comment에 연결된 Video ID를 줄 것인가
  • 모든 Comment ID들을 array로 video에 집어넣을 것인가

어떤 것을 해도 좋다.

 

아무튼 저렇게 하면 모든 데이터를 통으로 연결시켜주는 것이 아니라 id(데이터의 이름)만 넘겨주는 방식이 된다.

 

정리

[Model]

mongoose로 스키마를 만든다.

모델을 만들어 이를 export해준다

그리고 init에서 만든 model을 import 해온다

 

[Schema]

model의 형식,

model이 가져야 할 필수 요소들의 틀을 만들어줌

 

[relationship]

서로 다른 schema를 가진 서로 다른 데이터가 문맥상

(웹 상에서) 연관성을 가지고 있을 때 서로의 Schema를 ref를 통해 연결 시켜준다.

(다만, 데이터를 통으로 연결 시켜주는 것이 아닌,

id(데이터의 이름)만 넘겨주는 방식)

 

*ObjectID는 비디오가 만들어지면 자동적으로 생성된다

728x90
반응형