본문 바로가기
BackEnd/Database

[MongoDB] 자주 쓰는 명령어(Command)

by 푸고배 2021. 8. 23.

 서버(Server) 관련 명령어 

서버 실행

mongod

 

MongoDB 쉘 실행

mongo

 

 데이터베이스(Database) 관련 명령어 

생성된 DB 리스트 조회

show dbs

 

현재 사용하고 있는 DB 보기

db

 

DB 생성 및 선택

use [db_name]

새로운 DB 생성 또는 기존의 생성된 DB를 사용하는 명령어이다.

DB 생성과 동시에 작업환경을 새 DB로 전환한다.

show dbs로 현재 생성된 DB 리스트를 출력하면, 새로 생성된 DB는 보이지 않는다.

새로 생성된 DB는 비어있는데, 적어도 하나의 컬렉션을 등록해주어야 데이터 목록에 표시된다.

 

DB 삭제

db.dropDatabase()

현재 사용 중인 DB를 삭제한다.

 

 컬렉션(collection) 관련 명령어 

생성된 컬렉션 조회

show collections

현재 사용 중인 DB에 있는 컬렉션을 조회한다.

 

컬렉션 생성

db.createCollection("[collection_name]")

현재 사용 중인 DB에 이미 [collection_name]으로 생성된 컬렉션이 있는 경우 아래와 같은 에러 메세지가 출력된다.

{
	"ok" : 0,
	"errmsg" : "Collection already exists. NS: test.person",
	"code" : 48,
	"codeName" : "NamespaceExists"
}

 

컬렉션 삭제

db.[collection_name].drop()

 

 도큐먼트(document) 관련 명령어 

컬렉션 내 모든 도큐먼트 조회

db.{collection_name}.find()

만약 도큐먼트를 깔끔하게 json pretty로 출력하고 싶다면 아래와 같은 명령어를 사용한다.

db.[collection_name].find().pretty()

 

특정 도큐먼트 조회

db.[collection_name].find([query], [projection])
Prameter Type 설명
query document Optional(선택적). 도큐먼트 조회 기준. 컬렉션 내 모든 문서를 반환하려면 이 매개변수를 생략하거나 빈 문서({})를 전달한다.
projection documnet Optional. 도큐먼트 조회 시 보여질 field 지정. 모든 필드를 반환하려면 이 매개변수를 생략한다.
  • Return(반환) : 기준과 일치하는 문서에 대한 커서(cursor)이다. find() 메서드가 문서를 반환할 때 메서드는 실제로 문서에 커서를 반환한다.
  • 커서(cursor) : query 결과값을 가리키는 포인터
  • 연산자(Query Selectors) : 도큐먼트 조회 시 여러가지 연산자를 이용해 조회 조건을 줄 수 있다.
    • 비교연산자(Comparison)
      •  
        이름 설명
        $eq 지정된 값과 같은 값을 찾는다.
        $gt 지정된 값보다 큰 값을 찾는다.
        $gte 지정된 값보다 크거나 같은 값을 찾는다.
        $in 배열에 속하는 값을 찾는다.
        $lt 지정된 값보다 작은 값을 찾는다.
        $lte 지정된 값보다 작거나 같은 값을 찾는다.
        $ne 지정된 값과 같지 않은 값을 찾는다.
        $nin 배열에 속하지 않는 값을 찾는다.
    • 논리연산자(Logical)
      • 이름 설명
        $and 두 절의 조건과 일치하는 모든 도큐먼트를 반환한다.
        $not 조건과 일치하지 않는 도큐먼트를 반환한다.
        $or 두 절의 조건 중 하나라도 일치하는 도큐먼트를 반환한다.
        $nor 두 절의 조건과 모두 일치하지 않는 도큐먼트를 반환한다.

 

단일 도큐먼트 삽입

db.[collection_name].insertOne([document])

도큐먼트에 '_id' 필드를 지정하지 않으면 MongoDB는 OjbectId 값을 생성해  _id 필드에 추가한다.

ex)

db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
// db.inventory.find()
[
	{
    	_id: ObjectId("6122fcd6c8fe9037123aa6a6"),
        item: 'canvas',
        qty: 100,
        tags: ['cotton'],
        size: { h: 28, w: 35.5, uom: 'cm' }
    }
]

 

다중 도큐먼트 삽입

db.[collection_name].insertMany([document_list])

 

단일 도큐먼트 업데이트

db.[collection_name].updateOne([filter], [update], [options])
Parameter Type 설명
filter document 업데이트 적용 대상
update document 도큐먼트에 적용할 변동 내용
options document 적용 옵션 (ex. upsert, writeConcern, collation, arrayFilers, hint ...)

필드를 업데이트 하거나 추가할 수 있다.

  •  options
    •  
      Paramter Type 설명
      upsert boolean ture : filter와 일치하는 문서를 업데이트하며, 일치하는 문서가 없으면 새 문서를 생성한다.
      false : 일치하는 항목이 없을 때 새 문서를 생성하지 않는다.
      writeConcern document Optional, document 업데이트 시 필요한 설정값 (매뉴얼 참고)
      collation document Optional, 작업에 사용할 데이터 정렬 지정
      arrayFilter array Optional, 배열 필드에 대한 업데이트 작업을 위해 수정할 배열 요소를 결정하는 필터 문서의 배열
      hint Documnet or string Optional, 쿼리 조건을 지원하는데 사용할 인덱스를 지정하는 도큐먼트 또는 문자열

 

다중 도큐먼트 업데이트

db.[collection_name].updateMany([filter], [update], [options])

 

도큐먼트 대체

db.[collection_name].replaceOne([filter], [update], [options])

replaceOne()은 전체 도큐먼트를 대체하고, updateOne()은 필드를 업데이트하거나 추가할 수 있다는 점에서 차이점이 있다.

replaceOne()은 전체 도큐먼트를 대체하기 때문에 새 도큐먼트에 포함되지 않은 이전 문서의 필드는 손실된다.

updateOne() 새 필드를 사용하면 이전 문서의 필드를 잃지 않고 추가할 수 있다.

 

예를 들어 다음 도큐먼트가 있는 경우 :

{
   "_id" : ObjectId("0123456789abcdef01234567"),
   "my_test_key3" : 3333
}

 

replaceOne 사용 :

replaceOne({"_id" : ObjectId("0123456789abcdef01234567")}, { "my_test_key4" : 4})

결과 :

{
   "_id" : ObjectId("0123456789abcdef01234567"),
   "my_test_key4" : 4.0
}

 

updateOne 사용 :

updateOne({"_id" : ObjectId("0123456789abcdef01234567")}, {$set: { "my_test_key4" : 4}})

결과 :

{
   "_id" : ObjectId("0123456789abcdef01234567"),
   "my_test_key3" : 3333.0,
   "my_test_key4" : 4.0
}

 

단일 도큐먼트 삭제

db.[collection_name].deleteOne([filter])

 

다중 도큐먼트 삭제

db.[collection_name].deleteMany([filter])

 

참고자료 :

 

What's the difference between replaceOne() and updateOne() in MongoDB?

MongoDB bulk operations have two options: Bulk.find.updateOne() Adds a single document update operation to a bulk operations list. The operation can either replace an existing document or update

stackoverflow.com

 

반응형

댓글