프로필

프로필 사진
Popomon
Frontend Developer
(2020/12 ~)

    카테고리

    포스트

    [Node/Rest API] MongoDB 스키마 만들기

    2020. 11. 11. 23:25

    꿈가게: To Do List - iOS

    꿈가게: To Do List - Android

    테이블 컬럼에 대한 스키마 옵션

    자주 사용되는 기능 위주로 설명을 드리려고 합니다. 컬럼에 대한 대표적인 옵션들은 아래와 같습니다.

     

    No 옵션 이름 옵션 의미 예시
    1 type 속성의 타입 - String, Date, Number ... type: String
    type: Date
    type: Number
    type: [Number]
    2 unique 중복되지 않는 고유값(유일한 값)이어야 한다 unique: true
    unique: false
    3 required 필수로 요구되는 값인가? required: true
    required: [true, "This is required."]
    required: false
    4 default 값이 없는 경우 기본값은 무엇인가? default: Date.now()

     


    스키마 정의하기

     

    위에서 언급한 옵션에 따라 테이블의 스키마에 대한 정보를 정의합니다.

     

    const mongoose = require("mongoose");
    const Schema = mongoose.Schema;
    
    // 스키마 정의
    export const schema = {
      id: {
        sparse: true,
        type: String,
        unique: true
      },
      email: {
        required: [true, "Email is required."],
        type: String,
        unique: true
      },
      password: {
        required: [true, "Password is required."],
        type: String
      },
    };

     


    스키마 내장 함수 추가하기

    사용자 테이블로 예를 들면, 로그인 시 비밀번호가 맞는지 비교해주는 함수나 비밀번호를 초기화 해야하는 경우에 사용하는 함수를 스키마 안에 선언해 두고 사용할 수 있습니다. 이렇게 스키마 안에 함수를 선언하기 위해서는 다음과 같이 작성할 수 있습니다.

     

    const mongoose = require("mongoose");
    const Schema = mongoose.Schema;
    
    // 스키마 정의
    export const schema = { ... };
    
    // 함수 정의
    userSchema.methods.camparePassword = function() { ... }
    userSchema.methods.resetPassword = function() { ... }

     


    스키마 및 모델 생성하기

    다음은 사용자 테이블이 user 라는 이름인 경우에 mongoose.model 의 3번째 인자로 테이블의 이름을 넘겨주고, 두번째 인자로는 위에서 언급한 옵션을 활용하여 만들어진 schema 객체를 전달합니다.

     

    const mongoose = require("mongoose");
    const Schema = mongoose.Schema;
    
    // 스키마 정의
    export const schema = { ... };
    
    // 함수 정의
    userSchema.methods.camparePassword = function() { ... }
    userSchema.methods.resetPassword = function() { ... }
    
    // 스키마 및 모델 생성
    const userSchema = new Schema(schema, { timestamps: true });
    export const User = mongoose.model("User", userSchema, "user");