Mongoose ODM
- Object Data Modeling
- MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지
- Collection을 모델화하여, 관련 기능들을 쉽게 사용할 수 있도록 도와줌
왜 Mongoose ODM을 사용?
- 연결관리
- MongoDB의 기본 Node.js 드라이버는 연결상태를 관리하기 어려움
- Mongoose를 사용하면 간단하게 데이터베이스와의 연결상태를 관리해줌
- 스키마 관리
- 스키마를 정의하지 않고 데이터를 사용할 수 있는 것은 NoSQL의 장점이지만, 데이터 형식을 미리 정의해야 코드 작성과 프로젝트 관리에 유용함
- Mongoose는 Code-Level에서 스키마를 정의하고 관리할 수 있게 해 줌
- Populate
- MongoDB는 기본적으로 Join을 제공하지 않음
- Join과 유사한 기능을 사용하기 위해선 aggregate 라는 복잡한 쿼리를 해야 하지만, Mongoose는 populate를 사용하여 간단하게 구현할 수 있음
Mongoose ODM 사용하기
1. 스키마 정의
- Collection에 저장될 Document의 스키마를 Code-Level에서 관리할 수 있도록 Schema를 작성할 수 있음
- timestamps 옵션을 사용하면
생성, 수정 시간을 자동으로 기록해 줌
2. 모델 만들기
- 작성된 스키마를 mongoose에서 사용할 수 있는 모델로 만들어야 함
- 모델의 이름을 지정하여 Populate 등에서 해당 이름으로 모델을 호출할 수 있음
3. 데이터베이스 연결
- connect 함수를 이용하여 간단하게 데이터베이스에 연결할 수 있음
- mongoose는 자동으로 연결을 관리해 주어 직접 연결 상태를 체크하지 않아도 모델 사용 시 연결 상태를 확인하여 사용이 가능할때 작업을 실행함
4. 모델 사용
- 작성된 모델을 이용하여 CRUD를 수행할 수 있음
create
- create는 생성된 Document를 반환해 줌
find
- find 관련 함수를 사용하여 Document를 검색
- query를 사용하여 검색하거나 findById를 사용하면 ObjectID로 Document를 검색할 수 있음
query
- MongoDB에도 SQL의 where와 유사한 조건절 사용 가능
- $lt, $lte, $gt, $gte 를 사용하여 range query 작성 가능
- $in을 사용하여 다중 값으로 검색
- 전달 된 배열에 해당하는 것이 하나라도 있다면 데이터 리턴
- $or를 사용하여 다중 조건 검색
update
- update 관련 함수를 사용하여 Document를 수정
- find~ 함수들은 검색된 Document의 업데이트를 반영하여 반환해 줌
- mongoose 의 update 는 기본적으로 $set operator 를 사용하여, Document를 통째로 변경하지 않음
- 있는 속성이라면 수정, 없는 속성이면 추가한다.
delete
- delete 관련 함수를 사용하여 Document 삭제
- find~ 함수들은 검색된 Document를 반환해 줌
populate
- ocument 안에 Document를 담지 않고, ObjectID를 가지고 reference하여 사용할 수 있는 방법을 제공함
- Document에는 reference되는 ObjectID를 담고, 사용할 때 populate하여 하위 Document처럼 사용할 수 있게 해 줌
출처 : 엘리스 아카데미