Ziks

Mongoose 스키마 및 모델 본문

DB/MongoDB

Mongoose 스키마 및 모델

YunZiks 2020. 12. 8. 00:34
  • Mongoose는 MongoDB 및 Node.js를위한 ODM (Object Data Modeling) 라이브러리
  • 객체안의 속성들이 필드 이름이 되며 객체 형태로 작성됩니다.

SQL, Mongo 비교

Mongoose 스키마 및 모델 정의

Mongoose에서는 스키마모델의 개념이 가장 중요합니다. 스키마를 정의할 때는 주로 데이터의 형식, 데이터의 타입등을 고려하며 작성합니다.

  • 스키마는 문서에 어떤 값 또는 특성이 들어가는지 정의

    • 데이터베이스의 테이블, 컬렉션 타입 및 속성을 정의하는 문서의 형태 또는 구조
  • 모델은 위에서 만들었던 스키마를 통해 만드는 인스턴스

    •  작성된 스키마를 인스턴스화 하여 사용할 수 있게 함
  • Collection

    • 관계형 데이터베이스의 테이블과 동일
    • 여러 JSON 문서 보유 가능
  • Document

    • SQL의 레코드와 동일

스키마 작성 및 모델 활용

const mongoose = require('mongoose');

const bookSchema = mongoose.Schema({
  bookName: {
    type: String,
    required: [true, '책 이름이 필요합니다.'],
    minlength: 3,
    maxlength: 50
  },
  author: {
    type: String,
    required: true,
    maxlength: 30
  },

  publishedDate: {
    type: Date,
    default: Date.now()
  },
  price: {
    type: Number,
    default: 0
  }
  

});
const Book = mongoose.model('Book', bookSchema);

module.exports = {Book}

 

 

mongoose.Schema를 활용하여 스키마 작성을 진행합니다. bookName, author, publishedDate, price는 각각 필드명을 뜻하며 필드명 내에는 속성을 지정할 수 있습니다. 위의 코드를 예를 들며 설명해보겠습니다.

  • bookName
    • type은 String(문자열)
    • required[true, '책 이름이 필요합니다.']
      • required는 반드시 존재하여야 하는 여부를 나타내는 속성이며 만약 작성되지 않을 경우 유효성 검사를 통해 배열의 두번째 값인 '책 이름이 필요합니다.' 가 리턴됩니다.
    • minlength & maxlength
      • 최소 , 최대길이
  • publishedDate
    • type은 Date(날짜형식)
    • default
      • 기본값을 지정해 줄 수 있는 속성입니다.
      • Date.now()는 현재 시간을 저장하는 메소드입니다.
  • price
    • type은 Number(숫자형)
    • default는 0으로 지정
  • mongoose.model()을 통해 스키마를 인스턴스 화 시켜 타 모듈에서 import하여 사용할 수 있게끔 export 합니다.
    • mongoose.model('모델 이름', 스키마)

이외의 다양한 스키마 속성은 Mongoose Document를 참고해주세요

Comments