728x90
이전 글에서는 Mongoose를 사용하여 스키마에서의 유효성 검사에 대해 알아보았습니다. 이번에는 스키마에 커스텀 메서드를 추가하여 모델을 확장하는 방법을 살펴보겠습니다. 이를 통해 Mongoose가 기본으로 제공하는 기능 외에도 모델에 사용자 정의 기능을 추가하는 방법을 학습할 것입니다.
1. 인스턴스 메서드 정의
인스턴스 메서드는 특정 모델의 각 인스턴스에서 사용 가능한 메서드입니다. 이를 통해 개별 인스턴스에 대한 작업을 정의할 수 있습니다.
productSchema.methods.greet = function () {
console.log("HELLO!!! HI!! HOWDY!!!);
};
// 사용 예시
const product = new Product({ name: 'bike bag', price: 10 });
product.greet(); // "HELLO!!! HI!! HOWDY!!! - from bike bag"
2. 인스턴스 메서드 활용
특정 제품을 찾아서 해당 제품의 인스턴스 메서드를 호출하는 예시를 살펴봅니다.
productSchema.methods.greet = function() {
console.log("HELLO!!! HI!! HOWDY!!!")
console.log(` - from ${this.name}`)
}
const findProduct = async () => {
const foundProduct = await Product.findOne({ name: 'Bike Helmet' });
foundProduct.greet(); // "HELLO!!! HI!! HOWDY!!! - from Bike Helmet"
}
3. 인스턴스 메서드로 모델 업데이트
특정 제품의 onSale 속성을 토글하는 인스턴스 메서드를 정의합니다.
productSchema.methods.toggleOnSale = function () {
this.onSale = !this.onSale;
return this.save();
};
// 사용 예시
const findProduct = async () => {
const foundProduct = await Product.findOne({ name: 'Bike Helmet' });
console.log(foundProduct)
await foundProduct.toggleOnSale();
console.log(foundProduct) // true (토글된 값)
}
4. 인스턴스 메서드로 카테고리 추가
상품에 새로운 카테고리를 추가하는 인스턴스 메서드를 정의합니다.
productSchema.methods.addCategory = async function (newCat) {
this.categories.push(newCat);
return this.save();
};
// 사용 예시
const findProduct = async () => {
const foundProduct = await Product.findOne({ name: 'Mountain Bike' });
console.log(foundProduct)
await foundProduct.toggleOnSale();
console.log(foundProduct)
await foundProduct.addCategory('Outdoors');
console.log(foundProduct)
}
인스턴스 메서드를 활용하면 특정 모델의 인스턴스에 관련된 로직을 모듈화하고 재사용 가능한 기능으로 만들 수 있습니다. 다음 글에서는 정적 메서드에 대해 자세히 살펴보겠습니다. 계속 진행해주세요 ! 🚀
728x90
'백엔드(Backend) > 데이터베이스' 카테고리의 다른 글
[MongoDB] 가상 Mongoose (0) | 2023.12.05 |
---|---|
[MongoDB] 정적 메서드 추가하기 (0) | 2023.12.04 |
[MongoDB] Mongoose 유효성 검사 오류 해결하기 (1) | 2023.12.02 |
[MongoDB] Mongoose 업데이트 유효성 검사하기 (0) | 2023.12.01 |
[MongoDB] 추가 스키마 제약조건 (0) | 2023.11.30 |