menu

MongoDB 커맨드 및 메소드 정리

MongoDB는 개발과 스케일링을 용이하게 하기 위해 설계된 오픈소스 도큐먼트 지향 데이터베이스 입니다. Key-Value store 방식을 사용하며 흔히 말하는 NoSQL 데이터베이스 중의 하나입니다.

MongoDB에 저장된 데이터를 조작하는 방법 중 하나로, 커맨드라인 인터페이스인 MongoDB Shell을 사용할 수 있습니다.

해당 포스트에서는 MongoDB Shell에서 사용할 수 있는 커맨드나 메소드에 대해서 알아보고자 합니다.


MongoDB의 구조

이미지 없음

위의 이미지와 같이 collection은 table, document는 record라고 생각하시면 됩니다.


DB 조작
  • DB 작성

      $ mongo dbname
      use dbname
    

    use dbname으로 사용 DB 변경한다.

  • DB 삭제

      db.dropDatabase();
    
  • DB 리스트 확인

      show dbs
    


Collection 조작
  • Collection 리스트 확인

      show collections
    
  • Collection 생성

      db.createCollection('MYCOL');
    

    MYCOL이라는 Collection을 생성한다.

  • Collection 삭제

      db.MYCOL.drop();
    

    MYCOL이라는 Collection을 삭제한다.

  • Collection명 변경

      db.MYCOL.renameCollection("MYCOL2");
    

    MYCOL이라는 Collection의 이름을 MYCOL2로 변경한다.


Document 업데이트
  • Collection에 Document 추가

      db.MYCOL.insert( { name: 'kim', money: 999999 } );
    

    Key-Value 형식으로 Document(record)를 삽입한다.

  • money 필드 업데이트

    MongoDB에서는 기본적으로 처음에 매칭된 Document 만을 업데이트 합니다.

      db.MYCOL.update(
          { name: 'kim' }, 
          { $set: { money: 9999999 } }
      );
    

    name필드의 값이 ‘kim’인 첫 번째 Document의 money필드의 값을 9999999 로 변경한다.

  • money 필드 삭제

      db.MYCOL.update(
          { name: 'kim' }, 
          { $unset: { money: "" } }
      );
    
  • money 필드에 10 더하기

      db.MYCOL.update(
          { name: 'kim' }, 
          { $inc: { money: 10 } }
      );
    
  • money 필드 이름을 mymoney로 변경

      db.MYCOL.update(
          { name: 'kim' }, 
          { $rename: { money: "mymoney" } }
      );
    
  • 매칭되는 모든 Document의 업데이트

      db.MYCOL.update(
          { name: 'kim' }, 
          { $set: { money: 100000 } },
          { multi: true }
      );
    

    필드 name이 ‘kim’인 모든 Document의 money 필드의 값을 100000으로 변경한다.

  • Collection내의 모든 Document 삭제

      db.MYCOL.remove({});
    
  • Collection내의 특정 Document 삭제

      db.MYCOL.remove(
          { name: 'kim' }
      );
    

    필드 name이 ‘kim’인 모든 Document를 삭제한다.


Document 검색
  • 모든 Document 검색

      db.MYCOL.find();
      db.MYCOL.find( {} );
    
  • 특정 Document 검색

      db.MYCOL.find( { name: 'kim' } );
    

    필드 name이 ‘kim’인 모든 Document를 검색한다.

  • 필드 money가 30보다 큰 모든 Document 검색

      db.MYCOL.find( 
          { money: { $gt: 30 } }
      );
    
  • 필드 name이 ‘kim’이 아닌 모든 Document 검색

      db.MYCOL.find( 
          { name: { $ne: 'kim' } }
      );
    
  • 필드 name이 ‘kim’ or ‘lee’ 인 모든 Document 검색

      db.MYCOL.find( 
          { name: { $in: ['kim', 'lee'] } }
      );
    
  • AND 연산자를 이용한 검색

      db.MYCOL.find({
          $and: [
              { name  : 'kim' },
              { money : { $gt : 1000000  } }
          ]
      });
    
  • OR 연산자를 이용한 검색

      db.MYCOL.find({
          $or: [
              { name  : 'kim' },
              { money : { $lt : 1000000  } }
          ]
      });
    


그 외의 Document 조작
  • 취득할 필드를 지정

    위처럼 아무런 지정을 하지 않으면, 불필요한 필드를 포함한 모든 필드를 취득하게 된다.

    이때 표시 : 1, 비표시 : 0 로 지정하여 필요한 필드만 지정할 수 있다.

      db.MYCOL.find(
          { name: { $in: ['kim', 'lee'] } }, 
          { money: 1 }
      );
    

    필드 name이 ‘kim’ or ‘lee’ 인 모든 Document의 money 필드만 취득한다.

  • 검색되는 Document 개수 지정

      db.MYCOL.find( { name: 'kim' } ).limit(3);
    
  • Document 개수 획득

      db.MYCOL.find( { name: 'kim' } ).count();
    
  • Document 정렬

    오름차순 : 1, 내림차순 : -1

      db.MYCOL.find( { name: 'kim' } ).sort( { money: -1 } );
    
  • Document 필드 복제

    $를 prefix로 사용하면, 특정 필드의 값을 참조한다.

      db.MYCOL.aggregate(
          [
              { $addFields: {
                  "name": "$client_id",
                  "secret": "$client_secret"
              }},
              { "$out": "MYCOL" }
          ]
      );
    

    name, secret 필드를 생성해서 name 필드에는 client_id 필드의 값, secret 필드에는 client_secret 필드의 값을 할당한다.


    MongoDB에 관한 포스트 모음 : Tags - MongoDB



Written on May 7, 2019