mongosh에서 문서 입력·조회·수정·삭제하기

목차

MongoDB의 데이터베이스와 컬렉션을 선택하고 문서를 다루는 기본 절차입니다. 원노트의 계정 목록 예제를 실습용 데이터로 바꿨습니다. 아래 명령은 mongosh에서 실행하며 운영 컬렉션과 분리된 lab DB를 사용합니다.

데이터베이스와 문서 생성

use는 사용할 DB를 전환합니다. DB와 컬렉션은 실제 데이터가 저장될 때 만들어집니다. 문서는 JSON과 유사한 구조지만 각 문서가 반드시 같은 필드를 가질 필요는 없습니다.

TERMINAL / CONFIG
use lab
db.account.insertOne({id: 'lieper', department: 'infra', level: 1})
db.account.insertMany([
  {id: 'sample01', department: 'security', level: 2},
  {id: 'sample02', department: 'infra', level: 2}
])

조건을 붙여 조회

find의 첫 인자는 조건이고 두 번째 인자는 표시할 필드입니다. 운영에서 모든 문서를 출력하기보다 조건과 limit을 사용합니다. _id는 문서 식별자이므로 id라는 사용자 정의 필드와 구분합니다.

TERMINAL / CONFIG
db.account.find({department: 'infra'}, {_id: 0, id: 1, level: 1}).limit(10)
db.account.findOne({id: 'lieper'})

수정과 삭제

수정하기 전에 같은 필터로 대상 문서를 확인합니다. $set은 지정한 필드만 바꿉니다. updateOne·deleteOne은 조건에 맞는 한 문서를 대상으로 하며, 여러 문서를 대상으로 하려면 각각 Many 버전을 사용합니다.

TERMINAL / CONFIG
db.account.updateOne({id: 'lieper'}, {$set: {level: 2}})
db.account.find({id: 'lieper'})
db.account.deleteOne({id: 'sample01'})

빈 필터를 deleteMany에 넘기면 컬렉션의 모든 문서가 대상이 되므로 확인 없이 실행하지 않습니다. 결과의 matchedCount·modifiedCount·deletedCount를 보고 예상 건수와 비교합니다. id를 고유하게 유지해야 하는 서비스라면 고유 인덱스도 별도로 설계합니다.

DB › MongoDB
MongoDB 목록