jjinny_0609
냐냥
jjinny_0609
전체 방문자
오늘
어제
  • 분류 전체보기 (249)
    • IT (18)
      • Eclipse (1)
      • 라즈베리파이 (8)
      • 정보처리기사 (2)
      • 팀 프로젝트 (5)
      • 자료구조 (1)
      • CS 지식 (0)
    • 프로그래밍 언어 (75)
      • Java (33)
      • 파이썬 (4)
      • Node.js (38)
    • 프론트엔드(Frontend) (83)
      • HTML (7)
      • CSS (8)
      • JavaScript (10)
      • jQuery (2)
      • React (50)
      • Vue.js (6)
    • 백엔드(Backend) (62)
      • 네트워크 (1)
      • 데이터베이스 (49)
      • Spring (6)
      • JSP (6)
    • 협업 도구 (6)
      • Git & GitHub (6)
    • 리뷰 (1)
      • 향수 (1)
    • Game Engine (2)
      • 언리얼 엔진5 (1)
      • Unity (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그관리 홈
  • 글쓰기
  • 글관리

공지사항

인기 글

hELLO · Designed By 정상우.
jjinny_0609

냐냥

[MongoDB] Mongoose 인스턴스 메서드로 모델 확장하기
백엔드(Backend)/데이터베이스

[MongoDB] Mongoose 인스턴스 메서드로 모델 확장하기

2023. 12. 3. 13:30
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 (토글된 값)
}

false -> 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)
}

node product.js 결과

인스턴스 메서드를 활용하면 특정 모델의 인스턴스에 관련된 로직을 모듈화하고 재사용 가능한 기능으로 만들 수 있습니다. 다음 글에서는 정적 메서드에 대해 자세히 살펴보겠습니다. 계속 진행해주세요 ! 🚀

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
    jjinny_0609
    jjinny_0609
    뉴비 개발자의 학습 내용을 정리한 블로그입니다.

    티스토리툴바