개인 개발 프로젝트/Graphql, MongoDB 실습

[Graphql, MongoDB 실습] 6. 1:N 관계

종범2 2020. 8. 8. 21:12

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/

 

MongoDB One-to-Many Relationship tutorial with Mongoose examples - BezKoder

Understand MongoDB one-to-many relationship with Mongoose example - choose References vs Embedding Data model for MongoDB one-to-many relationship example

bezkoder.com