PromleeBlog
sitemap
aboutMe

posting thumbnail
MongoDB 기본 작업 CRUD - MongoDB 올인 5일차
MongoDB Basic Operations CRUD - All-in Day 5

📅

🚀

들어가기 전에 🔗

지난 시간에는 MongoDB에서 데이터를 어떻게 구조화할지 고민하는 데이터 모델링(내장 방식 vs 참조 방식)에 대해 배웠습니다. 좋은 데이터 설계가 중요하다는 것을 알게 되었죠.
이제 잘 설계된 구조에 맞춰 실제로 데이터를
넣고, 보고, 고치고, 지우는
방법을 배울 시간입니다.
이 네 가지 기본 작업을 우리는
CRUD
라고 부릅니다.
CRUD는 데이터베이스를 다루는 가장 기본적이면서도 핵심적인 기능입니다. 마치 우리가 글을 쓸 때 글자를 쓰고, 읽고, 수정하고, 지우는 것과 같습니다.
이번 시간에는 MongoDB Shell(mongosh)을 이용해서 이 CRUD 작업을 어떻게 수행하는지 하나하나 실습해보겠습니다.

🚀

CRUD란 무엇일까요? 🔗

CRUD는 데이터베이스에서 수행하는 네 가지 기본 작업을 나타내는 약자입니다.
CRUD
CRUD
이 네 가지 작업만 잘 이해하고 사용할 수 있어도 MongoDB를 활용하여 기본적인 데이터 관리는 충분히 할 수 있습니다.

🚀

실습 준비: 사용할 컬렉션 만들기 🔗

본격적인 CRUD 실습을 위해 먼저 데이터를 저장할 공간을 준비합시다.
MongoDB Shell(mongosh)을 실행하고, 연습용 데이터베이스 (예: 'myPracticeDB')를 사용하도록 전환한 뒤, 사용자 정보를 저장할 'users' 컬렉션을 사용한다고 가정하겠습니다.
 # MongoDB Shell 실행
mongosh
 
 # myPracticeDB 데이터베이스 사용 (없으면 새로 생성됨)
use myPracticeDB
 
 # 이제 'users' 컬렉션에 대한 작업을 수행합니다.
 # (컬렉션은 첫 데이터 삽입 시 자동으로 생성됩니다.)
이제 'users' 컬렉션에 데이터를 만들고, 읽고, 수정하고, 삭제하는 방법을 차례대로 알아보겠습니다.

🚀

1. 데이터 만들기 (Create) 🔗

새로운 데이터를 MongoDB에 저장하는 방법입니다. 문서(Document) 형태로 데이터를 준비하여 컬렉션에 삽입합니다.
👨‍💻
Shell 명령어의 줄바꿈은 Shift + Enter 로 가능합니다.

한 개의 문서 삽입: insertOne() 🔗

하나의 사용자 정보를 담은 문서를 'users' 컬렉션에 추가해 보겠습니다.
insertOne 명령어를 사용합니다.
db.users.insertOne({
  name: "김민준",
  age: 25,
  status: "active",
  hobbies: ["독서", "영화 감상"]
})
명령이 성공하면, MongoDB는 삽입된 문서의 고유 ID(ObjectId)를 포함한 결과를 반환합니다.
{
  acknowledged: true,
  insertedId: ObjectId("...") // 고유한 ID가 생성되어 반환됨
}
문서 삽입 성공
문서 삽입 성공

여러 개의 문서 동시 삽입: insertMany() 🔗

여러 명의 사용자 정보를 한 번에 추가하고 싶을 때는 insertMany 명령어를 사용합니다.
배열 안에 삽입할 문서들을 넣어줍니다.
db.users.insertMany([
  { name: "이수현", age: 30, status: "active", hobbies: ["요가", "음악 감상"] },
  { name: "박지훈", age: 22, status: "inactive", hobbies: ["게임", "축구"] },
  { name: "최유나", age: 28, status: "active", hobbies: ["사진 찍기"] }
])
성공하면 삽입된 각 문서의 ID 목록을 포함한 결과가 반환됩니다.
{
  acknowledged: true,
  insertedIds: [
    ObjectId("..."),
    ObjectId("..."),
    ObjectId("...")
  ]
}
insertMany
insertMany

🚀

2. 데이터 읽기 (Read) 🔗

이제 컬렉션에 저장된 데이터를 조회하는 방법을 알아봅시다.

여러 문서 조회: find() 🔗

find 명령어는 조건에 맞는 여러 개의 문서를 찾아옵니다.

한 개의 문서만 조회: findOne() 🔗

조건에 맞는 문서 중
가장 첫 번째 문서 하나만
가져오고 싶을 때는 findOne 명령어를 사용합니다.
결과는 문서 객체 하나로 반환됩니다. (찾는 문서가 없으면 null 반환)
// 이름이 "김민준"인 사용자 한 명 찾기
db.users.findOne({ name: "김민준" })
find 명령어에 조건을 줄 때, $gt(보다 큼), $lt(보다 작음), $in(배열 내 값 포함) 등 다양한
쿼리 연산자
를 사용하여 더 복잡한 조건 검색이 가능합니다. 이 부분은 다음 쿼리 및 집계 시간에 더 자세히 다루겠습니다.

🚀

3. 데이터 수정하기 (Update) 🔗

이미 저장된 문서의 내용을 변경하는 방법입니다.

조건에 맞는 첫 문서 수정: updateOne() 🔗

updateOne 명령어는 주어진 조건에 맞는
첫 번째 문서 하나만
수정합니다.
어떤 필드를 어떻게 수정할지는
업데이트 연산자
(예: $set)를 사용하여 지정합니다.
예를 들어, 이름이 '김민준'인 사용자의 나이(age)를 26으로 변경해 보겠습니다.
db.users.updateOne(
  { name: "김민준" }, // 조건: 이름이 "김민준"인 문서
  { $set: { age: 26 } } // 변경 내용: age 필드를 26으로 설정($set)
)
$set 연산자는 지정된 필드의 값을 주어진 값으로 바꾸거나, 필드가 없으면 새로 추가합니다.
성공하면 몇 개의 문서가 조건에 맞았는지(matchedCount), 실제로 수정되었는지(modifiedCount) 등의 정보가 반환됩니다.
{
  acknowledged: true,
  matchedCount: 1,
  modifiedCount: 1,
  // ... (upsertedId는 해당 없을 경우 생략됨)
}
김민준 age 25 -> 26
김민준 age 25 -> 26

조건에 맞는 모든 문서 수정: updateMany() 🔗

updateMany 명령어는 주어진 조건에 맞는
모든 문서
를 수정합니다.
예를 들어, 상태(status)가 'active'인 모든 사용자의 상태를 'verified'로 변경해 봅시다.
db.users.updateMany(
  { status: "active" },     // 조건: status가 "active"인 모든 문서
  { $set: { status: "verified" } } // 변경 내용: status 필드를 "verified"로 설정
)
➡️

주요 업데이트 연산자 🔗

업데이트 명령어에는 upsert: true 라는 옵션을 줄 수 있습니다. 이 옵션을 사용하면 조건에 맞는 문서가 없을 경우, 주어진 조건과 업데이트 내용을 합쳐서
새로운 문서를 삽입
합니다. (Update + Insert = Upsert)

🚀

4. 데이터 지우기 (Delete) 🔗

더 이상 필요 없는 문서를 컬렉션에서 삭제하는 방법입니다.
🖐️
삭제된 데이터는 복구하기 어렵습니다! 신중하게 사용해야 합니다.

조건에 맞는 첫 문서 삭제: deleteOne() 🔗

deleteOne 명령어는 주어진 조건에 맞는
첫 번째 문서 하나만
삭제합니다.
// 이름이 "박지훈"인 사용자 문서 하나 삭제
db.users.deleteOne({ name: "박지훈" })
성공하면 몇 개의 문서가 삭제되었는지(deletedCount) 정보가 반환됩니다.
{ acknowledged: true, deletedCount: 1 }
user 박지훈 삭제제
user 박지훈 삭제제

조건에 맞는 모든 문서 삭제: deleteMany() 🔗

deleteMany 명령어는 주어진 조건에 맞는
모든 문서
를 삭제합니다.
예를 들어, 상태(status)가 'inactive'인 모든 사용자를 삭제해 봅시다.
// status가 "inactive"인 모든 사용자 문서 삭제
db.users.deleteMany({ status: "inactive" })
만약 컬렉션의
모든
문서를 삭제하고 싶다면, 빈 객체 {}를 조건으로 주면 됩니다.
db.users.deleteMany({}) // users 컬렉션의 모든 문서를 삭제 (매우 주의!)

🚀

결론 🔗

오늘은 MongoDB의 가장 기본적인 데이터 조작 방법인 CRUD(Create, Read, Update, Delete)에 대해 배웠습니다.
insertOne, insertMany로 데이터를 만들고, find, findOne으로 데이터를 읽고, updateOne, updateMany로 데이터를 수정하고, deleteOne, deleteMany로 데이터를 삭제하는 방법을 MongoDB Shell 명령어를 통해 직접 실습해 보았습니다.
이 CRUD 작업은 앞으로 MongoDB를 사용하면서 가장 많이 하게 될 작업들입니다. 각 명령어의 사용법과 특징을 잘 익혀두시면 MongoDB를 훨씬 효과적으로 활용하실 수 있을 것입니다.
다음 시간에는 데이터를 읽는 작업(Read)을 좀 더 깊이 있게 다루어 보겠습니다. 다양한
쿼리 연산자를 활용한 고급 검색 방법
과 여러 데이터를 가공하고 요약하는 강력한 기능인
집계 프레임워크(Aggregation Framework)
에 대해 알아볼 예정입니다.

참고 🔗