간단한 MongoDB CLI(Command Line Interface)에서 사용 가능한 간단한 명령어들을 함께 알아보겠습니다. 먼저 데이터베이스를 조작하는 방법입니다.



# 데이터베이스 관련 명령어 알아보기
MongoDB CLI에서 출력, 조회를 비롯하여 생성, 삭제 등등의 다양한 명령어입니다. 아래에서 확인해보세요.


! 설치된 모든 데이터베이스 리스트 출력하기
존재하는 모든 데이터베이스를 보여줍니다.
> show dbs
> show databases

아래와 같이 현재 MongoDB에 저장된 모든 데이터베이스의 이름과 크기를 출력합니다. 만약 local, test라는 데이터베이스를 가지는 경우라면 아래와 같이 나타납니다.
local   (empty)
test    0.099GB

여기서 local은 기본으로 생성되는 데이터베이스 정보입니다. test라는 데이터베이스가 0.099GB의 용량으로 존재함을 알 수 있습니다.


! 원하는 데이터베이스로 이동하는 방법(생성, 추가)
MongoDB에서 데이터베이스를 새로 생성하려는 경우 use를 사용합니다. 그렇다면 mydb라는 이름으로 새로운 데이터베이스를 생성해봅니다. 만약 해당 데이터베이스가 없으면 새로 생성하게되고 동시에 mydb라는 데이터베이스를 이동하여 조작할 수 있게됩니다.
use mydb

이미 존재하는 경우라면 use 명령어는 새로 생성하지는 않으며 해당 데이터베이스만 선택하게됩니다. 데이터베이스를 선택하여야 안에 있는 collection을 조작, 콘트롤할 수 있습니다.


! 데이터베이스의 복사, copy
현재 위치한 데이터베이스를  복제합니다. 다른 곳으로 복사할 수 있습니다. 이때 db.copyDatabase()를 사용합니다.
> db.copyDatabase(origin, destination, [hostname])


! 데이터베이스의 삭제
데이터베이스가 선택된 경우 현재 위치한 데이터베이스를 삭제하려면 db.dropDatabase()를 사용합니다.
> db.dropDatabase()

만약 test 라는 데이터베이스를 삭제하려면? 아래와 같이 수행합니다.
> db.dropDatabase(test)



# MongoDB 컬렉션 조작하는 방법. 추가, 삭제, 선택
이번에는 데이터베이스 안에 위치한 위치한 컬렉션을 조작하는 방법을 알아봅니다. 컬렉션은 데이터를 담고 있는 단위로 RDBMS의 테이블과 비슷한 역할을 수행합니다.


! 컬렉션 리스트 보여주기
먼저 컬렉션을 선택하기 위해서 어떤 컬렉션이 데이터베이스에 존재하는지 확인해야합니다. show collections는  모든 컬렉션의 리스트를 출력합니다.
> show collections


! 특정 컬렉션 선택하기
만약 myCollection 이름의 컬렉션을 조작하기 위하여 컬렉션을 선택할 경우 아래와 같이 getCollection()을 사용합니다.
> db.getCollection('myCollection')


! 컬렉션의 생성
새로운 컬렉션을 생성합니다. 데이터베이스를 생성한 후에는 컬렉션 생성 역시 필요합니다.
> db.createCollection(name, [options])
위 함수는 name에 해당하는 컬렉션을 생성합니다. 컬렉션은 데이터베이스의 문서를 만들기 위해서 반드시 필요합니다. 선택가능한 옵션으로 다음이 있다.

autoIndexID [boolean] : id값에 대하여 자동 생성을 지정 가능하다. Default는 true이며 false로 설정시 직접 id값을 지정할 수 있게된다.


! 컬렉션의 삭제, collection delete
특정 컬렉션을 삭제하는 방법을 알아봅니다. 이 경우 drop()을 사용하면 삭제가 가능합니다.
> db.collection.drop()

만약 테스트라는 이름의 컬렉션을 삭제할 경우 아래와 같을 것입니다.
> db.test.drop()



# 컬렉션의 데이터값을 조작하기. 검색, 추가, 삭제, 변경

이제 컬렉션에 위치한 데이터값을 찾아서 원하는 필드의 값들을 찾거나 삭제, 변경 등등의 작업을 수행해보려합니다. 실제로 가장 많이 사용되는 명령어들입니다.


! 컬렉션에 데이터 추가하기, insert()
만약 컬렉션에 데이터를 추가할 경우 아래와 같이 사용합니다.
db.collection.insert({ 내용 })

​​​insert()는 컬렉션에 하나 또는 이상의 데이터, 문서를 추가합니다. 이때 insert() 안에는 저장할 값을 사용합니다. 예를들어 name값 webisfree를 추가하는 경우라면 아래와 같죠.
db.collection.insert({ name: 'webisfree' })

WriteResult({ "nInserted": 1 })

위 명령어를 수행하면 새로운 데이터가 저장되며 성공 메시지를 출력하게 됩니다.


! 컬렉셔에 저장된 값 보기, find()
위와 같이 저장된 값이 있으면 그 값을 볼 수 있어야합니다. 이때는 find()를 사용하여 어떤 값이 저장되어있는지 확인할 수 있습니다. 먼저 collection에 저장된 전체 데이터를 볼 경우 아래와 같이 입력합니다.
db.collection.find()

이제 특정 조건.. 예를들어 컬럼에 어떤 값을 포함하는 등의 쿼리가 필요할 수 있을 것입니다. 이때는 find() 내부에 옵션을 설정하게 됩니다. 예를들어 name값이 1인 값이 경우 아래처럼 찾을 수 있습니다.
db.collection.find({ 'name': '1' })


! 컬렉션에 데이터 업데이트, 수정하기
일치하는 값을 찾아 해당 필드의 값들을 업데이트하는 방법입니다. 만약 동일한 id값을 찾아 몇 가지 필드를 가진 data로 수정한다면 다음과 같습니다. find는 일치하는 값이고 data는 변경될 값입니다.

db.update({find}, {data}}


간단한 예를들어보겠습니다. id가 'wf'인 값을 찾아 name, no, date 필드를 수정하려면 어떻게 할까요? 아래와 같이 입력할 수 있습니다.
db.update(
  {
    id: 'wf'
  },
  {
    name: 'webisfree',
    no: '1',
    date: '2018-03-22'
  }
)

이제 원하던 대로 id의 필드에 wf값을 찾아 위의 data값들을 수정, 업데이트하게됩니다. 여기서 매우 중요한 부분이 있는데 update()를 수행할 경우 기존의 값들은 모두 변경되게됩니다. 예를들면 기존에 type이라는 필드가 존재하였는데 새롭게 업데이트할 때 type의 값이 변경되지 않더라도 update()를 수행하게 되면 함께 update되어버립니다. 즉, type 필드에는 지정된 update값이 없으므로 삭제되는 것과 동일한 현상이 일어납니다.


! update 수행시 특정 필드만 업데이트하고 나머지는 기존값 유지하는 방법
이 경우 기존값을 유지하기 위해서는 $set 키워드를 사용합니다. 위와 거의 동일하나 업데이트될 data값이 다음과 같이 바뀌게됩니다.
@ 기존
{ name: 'webisfree', no: '1', date: '2018-03-22' }

@ 변경 후
{ $set: { name: 'webisfree', no: '1', date: '2018-03-22' } }

위와 같이 $set을 사용하면 선택된 필드만 업데이트되고 나머지는 기존값을 계속해서 가지게됩니다. 매우 중요한 부분이고 자주 사용되므로 꼭 알아야합니다.


! 컬렉션 데이터 삭제하기
삭제하는 방법으로 cursur객체에 remove()를 사용합니다.

db.collection.remove(query, option)

아래와 같이 삭제할 수 있습니다. 만약 _id가 123인 값을 삭제하는 경우라면?

db.collection.remove({ _id: '123' })