MongoDB 소소한 정리 기술 이야기 2018.01.03 22:57

몽고DB 정리도 여기 저기 잘 되어 있지만, 내가 쓰는 커맨드, 설치했던 방법들을 모아 모아서 소소하게 정리해 둔다. ubuntu 16.04에서 설치하고, systemd 에 등록하는 것도 매우 유용 했다.


Ubuntu 16.04 에 몽고DB 설치

공식 사이트에 가면 14.04 버전 설치 방법만 나와있는데, 크게 다르진 않지만...
https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04

$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
$echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee etc/apt/sources.list.d/mongodb-org-3.2.list
$sudo apt-get update
$sudo apt-get install -y mongodb-org
$sudo vim /etc/systemd/system/mongodb.service

/etc/systemd/system/mongodb.service 파일 내용을 아래와 같이 작성

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target

아래 커맨드로 컨트롤.

sudo systemctl enable mongodb
sudo systemctl start mongodb 
sudo systemctl stop mongodb 
sudo systemctl status mongodb 

원격으로 접속하는 방법

바다 건너있는 내 서버에 접속하는 방법

계정은 Database의 계정이다.

$mongo -u <user_name> -p <password> <host>:<port>[/DB_Name]

MongoDB 계정설정

MongoDB DB 당 하나의 계정만을 갖으며, 필요하다면 DB마다 계정을 만들어야 된다.

>db.createUser({ user: "msalt", pwd: "jjang", roles: ["dbAdmin", "readWrite"]});

MongoDB 포트 및 환경 설정

sudo vi /etc/mongod.conf 에서 변경해줌. bind_ip 를 주석처리하면 모든 IP를 허용

MongoDB export & import

컬렉션 별로 export, 또는 adminMongo 에서도 export 가능. 하지만 아직 사용해본 적은 없다. dump를 더 많이...

$mongoexport --db test --collection traffic --out traffic.json

MongoDB dump

말그대로 통째로 dump 뜬다. 스크립트 돌려서 백업도 이걸로 하고 있다.

$mongodump -d <database_name> -o <directory_backup>
$mongorestore -d <database_name> <directory_backup>

MongoDB Shell Tip

MongoDB shell은 자바스크립트를 사용하듯이 사용하면된다. 다만, console.log 대신 printprintjson을 사용해야 한다.

The mongo shell is an interactive JavaScript interface to MongoDB. You can use the mongo shell to query and update data as well as perform administrative operations.

MongoDB 특정 문자열을 찾는 방법

여러 방법이 있겠지만, 자바스크립트를 사용하듯이 shell에서 아래와 같이 단순한 방법으로 찾는 문자열이 포함된 부분을 화면에 출력할 수 있다.

db.collection.find().forEach(function(item){
    var keyword = '/resource/'; //찾고자 하는 문자열
    var length = keyword.length;
    var string = item.field;
    var substring = '';

    if (!string)
        return;

    var index = string.indexOf(keyword);

    while (index != -1) {
        substring = string.substring(index, index + 50);
        string = string.substring(index+length);
        print(substring);
        index = string.indexOf(keyword);
    }
});

MongoDB 특정 문자열을 교체하는 방법

상대 경로로 저장되어 있던 리소스의 url을 S3로 바꾸면서 DB에 있는 내용을 모두 바꿔야 해서 사용했던 명령문이다. SQL만 사용하다가 이렇게 사용해보니 완전 기분이 색다르다.ㅋ

db.collection.find().forEach(function(item){
    var keyword = '/resource/';
    var replacement = 'https://s3-us-west-1.amazonaws.com/example/resource/';

    if (!item.field)
        return;

    item.field = item.field.replace(keyword, replacement);
    db.collection.save(item);
});

MongoDB 기본 커맨드 모음

  1. test 데이터베이스로 이동할때

    >use test
  2. 데이터베이스 목록 출력

    >show dbs
  3. 데이터베이스 상태확인

    >db.stats()
  4. 데이터베이스 shutdown
    admin 영억으로 이동후에 셧다운 해야함.

    
    >use admin
    >db.shutdownServer()
    
  5. 데이터베이스 로그아웃

    >db.logout()
  6. 데이터베이스 삭제

    >use db, and db.dropDatabase()
  7. collection 생성
    capped 옵션으로 사이즈를 고정 할 수 있으며, 초과되는 데이터는 overwrite 된다.

    >db.createCollection("emp",{capped:false, size:8192});
  8. colection list보기

    >show collections
  9. collection의 현재상태 및 정보분석

    >db.emp.validate();
  10. collection의 이름변경

    >db.emp.renameCollection("employee")
  11. Collection의 삭제

    >db.employee.drop();
  12. collection에 데이터 INSERT

    >db.emp.insert({eno:1101,name:"JIMMY"});
  13. collection에 데이터 UPDATE
    첫번째 인자는 일치 조건이고, 두번째는 업데이트할 값, 세번째는 옵션이다.

    >db.emp.update({eno:1101, age: { $lte: 20 }}, {$set:{fname:"JOO"}, {multi: false}});
  14. collection에 데이터 SELECT
    인자가 없으면 모든 documents 조회한다. 메서드 체이닝으로 정렬도 가능하다.

    >db.emp.find({url:"msalt.net"});
    >db.emp.find().sort({eno:-1});
    
  15. for문을 이용한 증감된 값을 Collection에 insert
    >for(var n=1103; n<=1120; n++) db.things.save({n:n, m:"test"+n})

티스토리 툴바