타입 지정 (Type)
String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array, Decimal128, Map, Schema.Types
예: { name: String }
필수 항목 (required)
필드가 필수인지 여부를 지정합니다.
예: { name: { type: String, required: true } }
기본값 (default)
필드의 기본값을 지정합니다.
예: { age: { type: Number, default: 0 } }
유일성 (unique)
필드 값이 유일해야 함을 지정합니다.
예: { email: { type: String, unique: true } }
인덱스 (index)
필드에 인덱스를 생성합니다.
예: { email: { type: String, index: true } }
유효성 검사 (validate)
필드 값에 대한 유효성 검사를 지정합니다.
예: { age: { type: Number, validate: value => value >= 0 } }
길이 제한 (maxlength, minlength)
문자열 필드의 최대/최소 길이를 지정합니다.
예: { name: { type: String, maxlength: 50 } }
열거형 (enum)
문자열 필드가 가질 수 있는 값들을 제한합니다.
예: { role: { type: String, enum: ['user', 'admin'] } }
일치 (match)
문자열 필드가 정규표현식에 맞아야 함을 지정합니다.
예: { email: { type: String, match: /.+\@.+\..+/ } }
맞춤 메시지 (custom error messages)
유효성 검사 실패 시 사용자 정의 오류 메시지를 설정합니다.
예: { age: { type: Number, min: [18, 'Too young'] } }
📌 참고 예제
const mongoose = require('mongoose');
const { Schema } = mongoose;
// 사용자 스키마 정의
const userSchema = new Schema({
// 문자열 타입 필드, 필수 입력, 최대 길이 100자
name: {
type: String,
required: true,
maxlength: 100,
},
// 이메일 필드, 필수 입력, 유일해야 하며 정규 표현식을 통해 이메일 형식 검사
email: {
type: String,
required: true,
unique: true,
match: /.+\@.+\..+/,
},
// 나이 필드, 최소 18세, 최대 65세, 유효성 검사 실패 시 맞춤 오류 메시지
age: {
type: Number,
min: [18, 'Must be at least 18'],
max: [65, 'Must be at most 65'],
},
// 역할 필드, 'user' 또는 'admin'만 허용, 기본값은 'user'
role: {
type: String,
enum: ['user', 'admin'],
default: 'user',
},
// 생성 날짜 필드, 기본값은 현재 시간
createdAt: {
type: Date,
default: Date.now,
},
// 수정 날짜 필드, 기본값은 현재 시간
updatedAt: {
type: Date,
default: Date.now,
},
});
// 모델 생성
const User = mongoose.model('User', userSchema);
module.exports = User;