2021. 3. 2. 18:37ㆍProjects/유튜브 클론코딩
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는 비디오가 만들어지면 자동적으로 생성된다
'Projects > 유튜브 클론코딩' 카테고리의 다른 글
[유튜브 클론코딩] 3.6 Uploading and Creating a Video (0) | 2021.03.02 |
---|---|
[유튜브 클론코딩] 3.5 Home Controller Finished (0) | 2021.03.02 |
[유튜브 클론코딩] 3.3 Video Model (0) | 2021.03.01 |
[유튜브 클론코딩] 3.2 Configuring Dot Env (0) | 2021.03.01 |
[유튜브 클론코딩] 3.1 Connecting to MongoDB (0) | 2021.03.01 |