# TIL-20210413

# Today

  • mongoDB

# content

# mongodb?

# mogodb intsall

  1. brew를 이용한 설치 먼저 homebrew를 설치한다. brew는 패키지 매니저의 일종이다.

  2. tap 연결 brew에서 탭의 용도 (opens new window)

 $ brew tap mongodb/brew
  1. community 버전 설치
 $ brew install mongodb-community@4.2

# foreign key

관계형 데이터 베이스에서 사용하는 foreign key 개념이 없다. 데이터의 관계가 중요하지 않은 데이터베이스이기 때문에 관계를 표시하는 foreign key가 따로 없다.

관계가 필요한 데이터가 있다면 크게 두가지 방식을 통해 저장 할 수 있다.

  • 한가지 필드에 여러가지 데이터가 들어간 document 자체를 삽입하는 형태
db.person.findOne()
{
  name: 'Mark Kornfield',
  ssn: '1223-234-75554',
  addresses : [
     { street: '123 Church St', city: 'Miami', cc: 'USA' },
     { street: '123 Mary Av', city: 'Los Angeles', cc: 'USA' }
  ]
}

addresses key에 addresses데이터를 여러개 가지고 있는 형태로 RDB에서 제1 정규화 이전 데이터 형태라고 볼 수 있다.
address의 전체 데이터를 가지고 있는 것이 특징이다.

  • 키(key) 데이터를 일치하여 두 가지를 연관짓는 형태 (foreign key형식과 비슷함)
> db.parts.findOne()
{
    _id : ObjectID('AAAA'), // 문자열을 특정 아이디로 변경해주는 로직
    partno : '1224-dsdf-2215',
    name : 'bearing',
    price: 2.63

> db.products.findOne()
{
    name : 'wheel',
    manufacturer : 'Ford',
    catalog_number: 2234,
    parts : [     // array of references to Part documents
        ObjectID('AAAA'),    // reference to the bearing above
        ObjectID('F17C'),    // reference to a different Part
        ObjectID('D2AA'),
        // etc
    ]
}

위와 같은 두 가지 형식의 데이터가 있다고 하자.
parts는 제품의 부품으로 생각 할 수 있다.
product는 제품 그 자체 이다.

product는 여러가지 파츠를 가지고 있고 parts 데이터를 parts의 id 값만 가지고 있는다.
두 제품의 join은 다음과 같은 방식으로 확인할 수 있다.

const product = db.products.findOne({ catalog_number: 2234 });

먼저 내가 찾고자 하는 제품정보를 찾는다.

const product_parts = db.parts.find({ _id: { $in: product.parts } }).toArray();

두 테이블의 조인 테이블을 찾을 수 없지만 독립적인 시행을 통해 앱단에서 두 테이블을 조인하는게 가능하다.