1:N 관계
MongoDB를 이용할 때 1:N 관계를 구현하는 방법은 다양한다. 크게 세 가지 방법으로 나뉜다. 간단한 예시를 통해 설명하겠다. User이라는 collection이 있고 Booking이라는 collection이 있을 때, User과 Booking이 1:N으로 존재해야 하는 예시이다.
User에 Booking을 저장하는 방법
// User
{
_id : 1,
name : 'Kim',
bookings : [
{
_id : 1,
name : 'Booking restaurant'
},
{
_id : 2,
name : 'Booking Movie'
}]
}
이 경우에 예시는 다음과 같다. User의 bookings 속성에 Booking을 배열로 저장한다. 이 방법은 User의 Booking을 조회할 때 속도가 빠른 장점이 있다. 하지만 Booking이 많아질수록 User가 지나치게 커진다는 단점이 존재한다. 따라서 1:N에서 N이 적을 때 사용한다.
User에 Booking의 Id를 배열로 저장하는 방법
// User
{
_id : 1,
name : 'Kim',
bookingIds : [1, 2]
}
// Booking
{
_id : 1,
name : 'Booking restaurant'
}
{
_id : 2,
name : 'Booking Movie'
}
이 경우의 예시는 다음과 같다. User의 bookingIds 속성이 존재하고 그 속성에는 User의 Booking Id를 배열로 저장한다. 이 방법은 Booking을 User에 저장하는 방법보다는 조회 속도가 느리지만 상대적으로 더 많은 Booking 관계를 표현할 수 있다는 장점이 있다. 물론 User의 Booking이 매우 많아지면 bookingIds 배열도 커지기 때문에 문제가 생긴다. 따라서 1:N에서 N이 많지 않을 때 사용한다.
Booking에 User Id를 저장하는 방법
// User
{
_id : 1,
name : 'Kim',
}
// Booking
{
_id : 1,
name : 'Booking restaurant',
userId : 1
}
{
_id : 2,
name : 'Booking Movie',
userId : 1
}
이 경우의 예시는 다음과 같다. Booking에 userId 속성이 존재하고 User의 Id를 저장한다. 이 방법 역시 첫 번째 방법보다는 조회 속도가 느린 단점이 있다. 하지만 User의 Booking이 매우 많아져도 괜찮다는 장점이 있다. 따라서 1:N에서 N이 매우 많을 때 사용한다. 다음 글에서는 두 번째 방법과 세 번째 방법을 직접 구현하고 설명하겠다.
참고자료
https://bezkoder.com/mongoose-one-to-many-relationship/
'개인 개발 프로젝트 > Graphql, MongoDB 실습' 카테고리의 다른 글
[Graphql, MongoDB 실습] 8. 1:N 관계 예시 (2) (0) | 2020.08.09 |
---|---|
[Graphql, MongoDB 실습] 7. 1:N 관계 예시 (1) (0) | 2020.08.08 |
[Graphql, MongoDB 실습] 5. Graphql Mutation with Transaction (0) | 2020.08.06 |
[Graphql, MongoDB 실습] 4. Graphql Mutation (0) | 2020.08.05 |
[Graphql, MongoDB 실습] 3. Graphql 기본 쿼리 예제 (0) | 2020.08.05 |