개요
Mongoose 는 Node.js 기반 스키마 기반 데이터 모델링, 유효성 검사, 쿼리 작성 및 비즈니스 로직 후크를 제공하는 ODM(객체 데이터 모델링) 라이브러리입니다.
ODM은 기존 SQL 데이터베이스에 사용되는 객체 관계형 매퍼(ORM)와 유사하지만, MongoDB의 문서 기반 데이터 모델을 위해 특별히 설계되었습니다.
객체 데이터 모델링이란 무엇인가요?
객체 데이터 모델링(ODM)은 애플리케이션 코드와 데이터베이스 문서 간에 구조화된 관계 생성합니다. Mongoose 와 같은 ODM을 사용하면 애플리케이션 수준에서 MongoDB 컬렉션에 매핑되는 스키마를 정의하고 해당 컬렉션 내의 문서에 구조를 시행하다.
MongoDB 애플리케이션 발전함에 따라 데이터베이스 스키마 수정할 수 있는 유연한 데이터 모델을 제공합니다. 그러나 사용 사례 컬렉션 의 문서 전체에서 데이터 구조의 일관성 필요할 수 있습니다.
Mongoose 다음과 같은 기능을 제공하여 이러한 일관성 요구 사항을 해결합니다.
문서의 구조 및 데이터 유형 정의
컬렉션과 상호 작용 스키마에서 모델 생성
애플리케이션 수준에서 데이터 유효성 검사 규칙 시행
데이터베이스 작업 전후에 사용자 지정 로직 실행
Fluent API 로 데이터베이스 쿼리 구성 및 실행
다른 컬렉션의 참조 문서(조인과 유사)
스키마 시행
Mongoose 애플리케이션 수준에서 스키마를 시행합니다. 필드 이름, 데이터 유형, 유효성 검사 규칙 등 컬렉션 의 문서 구조를 지정하는 스키마 정의합니다. Mongoose 데이터베이스 작업을 수행하기 전에 이 스키마 에 대해 데이터의 유효성을 검사합니다.
스키마 및 유효성 검사 규칙은 노드.js 애플리케이션 코드에만 존재합니다. MongoDB 서버 자체는 이러한 제약 조건을 인식하지 못하며 애플리케이션 이 보내는 모든 유효한 BSON 문서 수락합니다.
데이터 모델링
Mongoose 컬렉션과 상호 작용하기 전에 스키마와 모델을 정의해야 합니다. 이러한 구조화된 접근 방식은 관계형 데이터베이스 또는 기타 ORM에 대한 경험이 있는 개발자에게 익숙할 수 있습니다.
단점은 유연성이 감소한다는 것입니다. 데이터 구조를 수정해야 하는 경우 Mongoose 스키마를 업데이트 해야 합니다.
스키마 유효성 검사
Mongoose 두 가지 방법으로 데이터의 유효성을 검사합니다. 먼저 스키마 에서 필드 유형을 정의하여 각 필드 에서 허용하는 데이터 유형을 지정합니다. Mongoose 정의된 유형과 일치하지 않는 데이터를 삽입하려는 작업을 거부합니다.
둘째, 필수 필드, 최소값 또는 최대값, string 길이 제약 조건 또는 사용자 지정 유효성 검사 함수와 같은 특정 유효성 검사 규칙을 추가할 수 있습니다.
이러한 유효성 검사 규칙은 Node.js 애플리케이션 에서 Mongoose 사용할 때만 적용 . 다른 애플리케이션이나 데이터베이스 도구는 애플리케이션 코드에만 존재하기 때문에 이러한 규칙을 우회할 수 있습니다.
MongoDB Node.js 드라이버 와 MongoDB의 내장 스키마 유효성 검사 함께 사용하여 데이터 유효성을 검사하는 방법에 대한 자세한 내용은 서버 매뉴얼의 MongoDB 스키마 유효성 검사 가이드 참조하세요.
여러 컬렉션으로 작업하기
Mongoose 와 MongoDB Node.js 드라이버 모두 관계형 데이터베이스의 조인과 유사하게 여러 컬렉션의 문서 결합을 지원한다.
Mongoose 에서 채우기
Mongoose 다른 컬렉션의 문서를 참조하는 populate() 메서드를 제공합니다. 스키마 에서 참조가 참조하는 컬렉션 을 지정하여 참조를 정의합니다. ObjectId 는 참조에 사용되는 일반적인 유형이지만 Mongoose 문자열, 숫자, UUID 및 버퍼와 같은 다른 유형의 사용도 지원합니다. 쿼리할 때 Mongoose 이러한 참조를 실제 문서로 자동으로 바꿀 수 있습니다.
Mongoose 여러 쿼리를 실행하여 작업을 수행합니다. 이 접근 방식은 대규모 스캔으로 작업하거나 인덱스가 누락된 경우와 같은 특정 시나리오에서 유용할 수 있습니다.
MongoDB 에서 $lookup
MongoDB 동일한 데이터베이스 의 컬렉션 간 왼쪽 외부 조인과 유사한 조치 수행하기 위해 $lookup 집계 단계를 제공합니다. MongoDB Node.js 운전자 사용하면 집계 파이프라인을 통해 이 기능 에 직접 액세스 할 수 있습니다.
$lookup 연산자 단일 집계 파이프라인 작업으로 실행됩니다. 이 접근 방식은 경우에 따라 성능 이점을 제공할 수 있지만 실제 성능은 데이터 크기, 사용 가능한 인덱스, 쿼리 패턴 등의 요인에 따라 달라집니다.
Mongoose 시작하기
Mongoose 설치하고, MongoDB 에 연결하고, Mongoose 스키마 및 모델을 사용하여 CRUD 작업을 수행하는 방법을 학습하려면 Mongoose 시작하기 튜토리얼을 참조하세요.