본문 바로가기
DB/MongoDB

[Mongoose] 스키마와 모델

by 노믹 2022. 12. 13.

스키마(Schema)와 모델(Model)

  • 스키마는 컬렉션에 들어가는 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체이다.
  • 모델은 스키마를 사용하여 만드는 인스턴스로, 데이터베이스에서 실제 작업을 처리할 수 있는 함수들을 지니고 있는 객체이다.

스키마 생성

  • 스키마를 만들 때 mongoose모듈은 Schema를 사용하여 정의한다.
  • 각 필드 이름과 필드의 데이터 타입 정보가 들어 있는 객체를 작성한다.
  • 필드의 기본값으로는 default 값을 설정하면 된다.
  • 스키마 내부에 다른 스키마를 내장 시킬 수도 있다.
const mongoose from 'mongoose';

const { Schema } = mongoose;

const PostSchema = new Schema({
  title: String,
  body: String,
  tags: [String], // 문자열 배열
  publishedDate: {
    type: Date,
    default: Date.now // 현재 날짜를 기본값으로 지정
})

스키마의 대표적인 타입

  • null : null 값과 존재하지 않는 필드
    ex: null

  • String : 문자열
    ex: “mongoDB”

  • Number : 숫자
    ex: 3.14

  • Date : 날짜
    ex: new Date()

  • Buffer : 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열을 저장
    ex: 0x65

  • Boolean : true or false
    ex: true

  • ObjectId(Schema.Types.ObjectId) : 객체 ID, 주로 다른 객체를 참조할 때 넣음
    ex: ObjectId()

  • Array : 배열 형태의 값
    ex: ["a", "b", "c"]

모델(Model) 생성

  • 모델을 만들 때는 mongoose.model 함수를 사용한다.
  • model() 함수는 두 개의 파라미터를 필요로 한다.
  • 첫 번째 파라미터는 스키마 이름이고, 두 번째 파라미터는 스키마 객체이다.
  • 데이터베이스는 스키마 이름을 정해주면 그 이름의 복수 형태로 데이터베이스에 컬렉션 이름을 만든다.(스키마 이름이 'Post'이면 컬렉션은 'posts'로 생성)
  • MongoDB에서 컬렉션 이름을 만들 때, 컨벤션은 구분자를 사용하지 않고 복수 형태로 사용하는 것이 권장된다.
  • 컨벤션 규칙을 따르고 싶지 않다면, model()함수의 세 번째 파라미터에 원하는 컬렉션 이름을 넣으면 된다.
const mongoose from 'mongoose';

const { Schema } = mongoose;

// 스키마 객체 생성
const PostSchema = new Schema({
  title: String,
  body: String,
  tags: [String], // 문자열 배열
  publishedDate: {
    type: Date,
    default: Date.now // 현재 날짜를 기본값으로 지정
})

// 모델 생성
const Post = mongoose.model('Post', PostSchema);
export default Post;

 

'DB > MongoDB' 카테고리의 다른 글

역순 Sort 정렬, Limit 제한하기  (0) 2022.12.14
[Mongoose] Schema 세팅 할 때 createdAt 자동 설정  (0) 2022.12.14
[Mongoose] 코드에서 MongoDB 사용하기  (0) 2022.12.13
Studio 3T  (0) 2022.12.13
MongoDB란?  (0) 2022.12.13