프로그래밍 언어/NODE JS

스키마 정의하기

· 코딩마이데이

시퀄라이즈에서 테이블을 만들었던 것처럼 몽구스 스키마를 만듭니다. schemas 폴더에 user.js와 comments.js를 만듭니다.

schemas/users.js

const mongoose = require("mongoose");

const { Schema } = mongoose;
const userSchema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true,
  },
  age: {
    type: Number,
    require: true,
  },
  married: {
    type: Number,
    required: true,
  },
  comment: String,
  createdAt: {
    type: Date,
    default: Date.now(),
  },
});

module.exports = mongoose.model("User", userSchema);

 

몽구스 모듈에서 Schema 생성자를 사용해 스키마를 만듭니다. 시퀄라이즈에서 모델을 정의하는 것과 비슷합니다. 필드를 각각 정의합니다.

몽구스는 알아서 _id를 기본 키로 생성하므로 _id 필드는 적어줄 필요가 없습니다. 나머지 필드의 스펙만 입력합니다.

 

몽구스 스키마에서 특이한 점은 String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array를 값으로 가질 수 있다는 점입니다. 몽고디비의 자료형과는 조금 다르며, 편의를 위해 종류 수를 줄여뒀습니다.

 

name 필드의 자료형은 String이고 필수이며 고유한 값이어야 합니다. age 필드는 Number 자료형이고 필수이며, married 필드는 불 값 자료형이고 필수입니다. comment 필드는 String 자료형입니다. required나 default 등의 옵션이 필요하지 않다면 간단하게 자료형만 명시하면 됩니다. createdAt 필드는 Date 자료형이고 기본값은 Date.now(데이터 생성 당시의 시간)입니다.

 

마지막에는 몽구스의 model 메서드로 스키마와 몽고디비 컬렉션을 연결하는 모델을 만듭니다.

 

댓글 스키마도 만들어봅니다.

 

schemas/comment.js

const mongoose = require("mongoose");

const { Schema } = mongoose;
const {
  Types: { ObjectId },
} = Schema;
const commentSchema = new Schema({
  commenter: {
    type: ObjectId,
    required: true,
    ref: "User",
  },
  comment: {
    type: String,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now(),
  },
});

module.exports = mongoose.model("Comment", commentSchema);

 

commenter 속성만 보면 됩니다. 자료형이 ObjectId입니다. 옵션으로 ref 속성의 값이 User로 주어져 있습니다. commenter 필드에 User 스키마의 사용자 ObjectId가 들어간다는 뜻입니다. 나중에 몽구스가 JOIN과 비슷한 기능을 할 때 사용됩니다.

'프로그래밍 언어 > NODE JS' 카테고리의 다른 글

프로젝트 구조 갖추기 (1)  (0) 2025.10.05
쿼리 수행하기  (0) 2025.10.02
몽고디비 연결하기  (1) 2025.09.26
몽구스 사용하기  (0) 2025.09.23
CRUD 작업하기  (0) 2025.09.20