mongoose에는 스키마(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
})
mongoose Schema Types
Schema는 다음과 같은 타입을 지원한다.
- String : 문자열
- Number : 숫자
- Date : 날짜
- Buffer : 파일을 담을 수 있는 버퍼
- Boolean : treu or false
- Mixed(Schema.Types.Mixed) : 어떤 데이터도 넣을 수 있는 형식
- ObjectId(Schema.Types.ObjectId) : 객체 아이디, 주로 다른 객체를 참조할 때 넣음
- Array : 배열 형태의 값, []로 감싸서 사용
모델 생성
- 모델을 만들 때는 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;
참고
리액트를 다루는 기술