MongoDB 기본 사용법


Oracle과 MongoDB의 차이

MongoDB는 소위 NoSQL이라는 데이터베이스이다. JSON과 같은 도큐먼트라고 하는 데이터를 컬렉션이라고 하는 묶은으로 유지하도록 되어 있다. 기존의 RDB의 대표로서 Excel과 Oracle과 MongoDB의 명칭의 연관은 다음과 같다.

Excel Oracle MongoDB
Book Schema Database
Sheet Table Collection
Row Row Document
Column Column Field
Shell Field Value

서버

서버 명령 mongod이다. 여기서는 mongod를 사용하여 서버를 시작/종료하는 명령을 살펴보겠다. 여기에서 다루지 않는 mongod 명령 옵션은 “MongoDB 명령 mongod 사용법"을 참조한다.

서버 시작/종료

  • 서버 시작
    • 데이터베이스 파일을 저장할 위치가 C:\mongodb\server\data에 준비되어 있다고 가정한다.
    • 명령 프롬프트를 시작하고, 다음 명령을 실행하여 MongoDB 서버를 시작할 수 있다.
      mongod --dbpath "C:\mongodb\server\data"
      
  • 서버 종료
    • 시작 중인 명령 프롬프트에서 Ctrl + C를 입력하면 shutdown 명령이 발행되고 MongoDB가 종료된다.

클라이언트

위의 단계에서 MongoDB를 시작한 상태에서 클라이언트 명령어 mongo을 사용하여 연결해 보자. MongoDB 서버와 동일한 서버에서 연결을 수행하는 경우, 위의 서버에 대해 시작한 명령 프롬프트와 별도로 시작하여 연결한다. 여기서 다루지 않는 mongo의 다른 옵션에 대해서는 “MongoDB 명령 “mongo” 사용 방법"을 참조한다.

서버 연결/해제

  • 서버 연결
    mongo
    
    MongoDB를 기동하고 있는 단말과 같은 단말의 경우, 명령 프롬프트를 시작하여 이하의 커멘드를 실행하면 접속할 수 있다. 다른 호스트인 경우에는 --host <호스트명> 옵션으로 연결 대상을 지정한다.
  • 서버 연결 해제
    MongoDB 연결을 끊으려면, Ctrl + C를 입력하여 연결을 끊을 수 있다. 또한 다음 명령을 실행하여 연결을 끊을 수 있다.
    > exit
    

데이터베이스 생성/목록 조회/변경/삭제

  • 데이터베이스 생성

    > use sample_database
    

    지정된 데이터베이스에 연결한다. 데이터베이스가 존재하지 않으면 생성한다.

  • 데이터베이스 목록 조회

    > show dbs
    

    기본적으로 admin, local, test 이 3개의 데이터베이스가 존재한다.

    use <데이터베이스명>를 실행하자마자 목록을 표시하며 생성한 데이터베이스는 표시되지 않다. show dbs로 표시되려면 최소한 1건 이상의 데이터 등록이 필요하다.

  • 데이터베이스 이름 변경

    > db.copyDatabase('old_database', 'new_database')
    > use old_database
    > db.dropDatabase()
    

    유감스럽게도 데이터베이스 이름을 바꾸는 명령이 없으므로, 이전 데이터베이스를 새 데이터베이스로 복사하고 이전 데이터베이스를 삭제하는 식으로 해야 한다.

  • 데이터베이스 삭제

    > use sample_database
    > db.dropDatabase();
    

    삭제할 데이터베이스에 연결하고 db.dropDatabase()를 실행하면 삭제할 수 있다.

컬렉션 생성/목록 조회/변경/삭제

  • 컬렉션 생성

    > db.createCollection(products);
    

    인수에 지정된 이름의 콜렉션을 생성한다.

  • 컬렉션 목록 조회

    > show collections
    

    현재 연결 중인 데이터베이스에 포함된 컬렉션 목록을 표시한다.

  • 컬렉션 이름 변경

    > db.old_collection_name.renameCollection(new_collection_name, true);
    

    old_collection_name에서 new_collection_name으로 이름을 변경한다. 또, 변경할 때에 기존 컬렉션 old_collection_name을 삭제하는 경우에는 두번째 인수에 true를 지정한다.

  • 컬렉션 삭제

    > db.products.drop();
    

    지정된 컬렉션을 삭제한다.

도큐먼트 추가/조회/변경/삭제

  • 도큐먼트 추가

    > db.products.insert(
            {name: 'sample book', price: 1280}
        )
    

    지정된 컬렉션에 문서를 추가한다. insert를 실행하면 자동으로 _id필드가 추가된다.

  • 도큐먼트 조회

    > db.products.find(
             {name: {$eq: 'sample book'}}
        )
    

    인수에 지정하는 쿼리의 기본 형식은 { 필드: { 연산자: 값}}와 같다. 연산자에 대해서는 MongoDB - Query and Projection Operators에 기재되어 있다. 여기서 인수 지정 없으면 모든 데이터가 조회된다.

  • 도큐먼트 변경

    > db.products.update(
            {name: {$eq: 'sample book'}},
            {$set: {name: 'Hack MongoDB'}},
            {upsert: false, multi: true}
        )
    

첫번째 인수로 지정한 조건에 매치하는 도큐먼트를, 두번째 인수로 지정한 문서 내용으로 변경한다. 세번째 인수의 객체로 지정하고 있는 upsert는 “조건에 일치하는 문서가 발견되지 않았을 경우에 삽입할지 에 대한 여부"를 지정하고 있고, multi는 “조건에 일치하는 도큐먼트 모두를 변경 대상으로 할지에 대한 여부"를 지정한다.

  • 도큐먼트 삭제
    > db.products.remove(
            {name: {$eq: 'sample book'}}
        )
    
    첫번째 인수로 지정된 쿼리에 일치하는 모든 문서를 삭제한다.

참고 자료