본격적으로 mongoose 데이터베이스를 사용하여 블로그 포스트 데이터를 관리하고자 합니다.
우선 기본적으로 mongoose에서의 스키마(schema)와 모델(model)에 대해 개념을 잡고 가겠습니다.
- 스키마
컬렉션(Collection)에 들어가는 문서(Document) 내부의 각 필드의 형식을 정의
- 모델
스키마를 사용하여 만드는 인스턴스로 데이터베이스에서 실제 작업을 처리할 수 있는 함수들을 지니고 있는 객체
1. 스키마 생성
블로그 포스트 생성을 가정하고 필요한 데이터 항목을 정합니다.
- 제목
- 내용
- 태그
- 작성일
포스트 하나에 위와 같이 4개의 정보가 필요합니다. 각 정보에 대한 필드이름과 데이터 타입을 결정하여 스키마를 만듭니다.
필드이름 | 데이터 타입 | 설명 |
title | String | 제목 |
body | String | 내용 |
tags | String Array | 태그 목록 |
publishedDate | Date | 작성 날짜 |
스키마와 모델에 관련된 코드는 src/models 디렉터리에 작성하겠습니다.
다음과 같이 post.js 파일을 만듭니다.
import mongoose from 'mongoose';
const { Schema } = mongoose;
const PostSchema = new Schema({
title: String,
body: String,
tags: [Stirng], // 문자열로 이루어진 배열
publishedDate: {
type: Date,
default: Date.now, // 현재 날짜를 기본값으로 지정
},
});
스키마를 만들 때 mongoose 모듈의 Schema 를 사용하여 정의합니다. 그리고 각 필드 이름과 필드의 데이터 타입 정보가 들어 있는 객체를 만듭니다. 필드의 기본값은 default 로 설정합니다.
Schema에서 지원하는 타입은 다음과 같습니다.
타입 | 설명 |
String | 문자열 |
Number | 숫자 |
Date | 날짜 |
Buffer | 파일을 담을 수 있는 버퍼 |
Boolean | true 또는 false 값 |
Mixed(Schema.Types.Mixed) | 어떤 객체도 넣을 수 있는 형식 |
ObjectId(Schema.Types.ObjectId) | 객체 아이디, 주로 다른 객체를 참조할 때 넣음 |
Array | 배열 형태의 값으로 [ ]로 감싸서 사용 |
2. 모델 생성
모델을 만들 때는 mongoose.model 함수를 사용합니다. post.js 파일 맨 하단에 모델을 생서하는 코드를 입력합니다.
(...)
const PostSchema = new Schema({
title: String,
body: String,
tags: [Stirng], // 문자열로 이루어진 배열
publishedDate: {
type: Date,
default: Date.now, // 현재 날짜를 기본값으로 지정
},
});
const Post = mongoose.model('Post', PostSchema);
export default Post;
모델 인스턴스를 만들고 export default를 통해 내보내 줍니다.
모델 함수의 경우 기본적으로 두 개의 파라미터가 필요합니다. 첫 번째는 스키마 이름, 두 번째는 스키마 객체 입니다.
데이터베이스는 스키마 이름을 정해 주면 그 이름의 복수 형태로 데이터베이스 컬렉션 이름이 만들어 집니다..
예를 들어 스키마 이름을 Post로 설정하면, 실제 데이터베이스에 만들어 진 컬렉션 이름은 posts 입니다.
BookInfo 로 입력하면 bookinfos를 만듭니다.
MongoDB에서 컬렉션 이름을 만들 때 권장되는 컨벤션(Convention)은 구분자를 사용하지 않고 복수 형태로 사용하는 것 입니다. 만약 이 컨벤션을 따르고 싶지 않다면 세 번째 파라미터에 원하는 이름을 입력하면 됩니다.
예) mongoose.model('Post', PostSchema, 'custom_book_collection');
이 경우 첫 번째 파라미터로 넣어준 Post 는 다른 스키마에서 현재 스키마를 참조해야 할 때 사용합니다.
'데이터베이스' 카테고리의 다른 글
mongoose 데이터 삭제하기 - REPL 사용 (0) | 2023.07.30 |
---|---|
mongoose로 데이터 찾기 (0) | 2023.07.26 |
mongoose로 대량의 데이터 입력하기 (0) | 2023.07.24 |
mongoose로 MongoDB 접속하기 (0) | 2023.07.24 |
MongoDB 데이터 생성 및 조회 (0) | 2023.07.18 |