MongoDB Document 생성하기

 

MongoDB Document 생성하기

MongoDB의 도큐먼트와 생성하는 법에 대해 알아보는 포스팅입니다.

MongoDB의 특징을 얘기할때 빠지지 않는게 도큐먼트 지향적인 데이터베이스라는 것입니다. 도큐먼트는 본질적으로 속성의 이름과 값으로 이루어진 쌍의 집합입니다. 속성의 값은 문자열이나 숫자, 날짜와 같이 간단한 데이터 타입이 될 수 있고, 이 값들은 배열이나 다른 JSON 도큐먼트가 될 수 있습니다. MongoDB에서 말하는 중첩 도큐먼트의 개념입니다.  JSON 도큐먼트는 숫자값을 제외한 모든 곳에서 double quotation(“)을 사용합니다. MongoDB 역시 같은 형식을 취하고 있습니다.

MongoDB의 Document는 0개 이상의 정렬된 필드 값 쌍이 저장되는 엔티티입니다. MongoDB는 내부적으로 BSON (Binary JSON) 형식으로 파일을 저장합니다. BSON은 JSON의 이진 인코딩 직렬화입니다. BSON은 C 데이터 유형을 사용하므로 프로그래밍 언어에서 데이터를 BSON으로 인코딩하거나 BSON에서 디코딩하는 것이 더 쉽습니다. 이 때문에 MongoDB의 Document를 더 쉽게 탐색할 수가 있습니다. Document에 다른 Document가 중첩되어 있을수 있습니다. 그리고 MongoDB는 이러한 도큐먼트들을 컬렉션에 저장합니다.

다음은 MongoDB의 문서 구조입니다.

{
    field1:value1;
    field2:value2;
    .
    .
    fieldN:valueN;
}

도큐먼트에는 N개의 필드-값(field:value) 쌍이 포함 될 수 있습니다. 필드는 RDBMS의 컬럼, VALUE는 ROW값처럼 생각하면 이해하기가 쉽습니다.
VALUE값은 BSON 사양에서 지원하는 모든 데이터 유형을 가질수 있습니다.

다음은 필드-값 쌍이 있는 간단한 문서입니다.

{
    name: "Kim",
    age: 23,
    place: "Seoul",
    hobbies: ["Singing", "Reading Books"]
}

중첩된 다른 문서가 포함된 Document의 예시입니다.

{
    name: "Kim",
    age: 23,
    place: "Seoul",
    hobbies: ["Singing", "Reading Books"]
    spouse: {
        name: "Lee",
        age: 21
    }
}

spouse 항목을 보면 하나의 field-value 구조가 아닌 두개의 field-value를 가지고 있습니다. 하나의 컬럼에 하나의 열밖에 가지지 못하는 RDBMS 구조에서는 상상도 못하는 구조인겁니다. 다른 테이블과 조인해서 결과를 만들수 있지만, MongoDB에서는 하나의 Document안에 중첩으로 데이터를 적재할 수 있습니다.

spouse: {
        name: "Lee",
        age: 21
    }

이 부분이 중첩 Document의 예시입니다.

RDBMS에서는 하나의 객체(Object)를 여러개의 테이블로 나누어 표현하는 기법인 정규화를 통해 하나의 단위데이터를 오직 하나의 테이블로 표현합니다. 하지만 정규화를 너무 많이 하면 그에 따른 비용이 발생하는데, 이는 곧 데이터를 모으는 작업을 해야 한다는 것입니다.
반대로 도큐먼트 지향적인 데이터 모델에서는 객체를 자연스럽게 모아 놓은 형태로 표현함으로써 객체를 전체적으로 작업할 수 있습니다.

 

단일 도큐먼트 생성

db.컬렉션이름.insertOne()

> db.user.insertOne({userID: "kimikimi", username: "Kim", password: 1111})
{
  "acknowledged" : true,
  "insertedId" : ObjectId("5f50a274237701f054a0e52e")
}

> db.user.find().pretty()
{
  "_id" : ObjectId("5f50a274237701f054a0e52e"),
  "userID" : "kimikimi",
  "username" : "Kim",
  "password" : 1111
}

 

다수 도큐먼트 생성

db.컬렉션이름.insertMany()

> db.user.insertMany( [
... {username: "Kei", password: 4321 },
... {username: "Mijoo", password: 3212 },
... {username: "Yein", password: 3123 },
... ]);
{
  "acknowledged" : true,
  "insertedIds" : [
    ObjectId("5f51894e237701f054a0e52f"),
    ObjectId("5f51894e237701f054a0e530"),
    ObjectId("5f51894e237701f054a0e531")
  ]
}

> db.user.find().pretty()
{
  "_id" : ObjectId("5f50a274237701f054a0e52e"),
  "userID" : "kimikimi",
  "username" : "Kim",
  "password" : 1111
}
{
  "_id" : ObjectId("5f51894e237701f054a0e52f"),
  "username" : "Kei",
  "password" : 4321
}
{
  "_id" : ObjectId("5f51894e237701f054a0e530"),
  "username" : "Mijoo",
  "password" : 3212
}
{
  "_id" : ObjectId("5f51894e237701f054a0e531"),
  "username" : "Yein",
  "password" : 3123
}

 

간단하게 도큐먼트가 무엇인지와 생성하는 방법에 대해서 포스팅 해보았습니다.

다음 포스팅에서는 도큐먼트를 조회하는 방법에 대해서 포스팅 할 예정입니다.

 

현재 MongoDB를 공부하면서 참고하는 것들입니다.

  • MongoDB 공홈 및 Webinar
  • 맛있는 MongoDB (도서)
  • MongoDB in Action (도서)
  • Real MongoDB (도서)
  • Node.js와 flentd를 활용하여 배우는 오픈소스 몽고DB (도서)
소셜 미디어로 공유하기

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.