MongoDB CRUD 작업 마스터하기: 실용적인 명령어 가이드
널리 사용되는 NoSQL 문서 데이터베이스인 MongoDB는 유연성, 확장성 및 성능 덕분에 수많은 최신 애플리케이션의 중추를 이룹니다. 모든 데이터베이스와의 상호 작용의 핵심은 기본 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete) (CRUD) 작업입니다. 새로운 기능을 구축하는 개발자부터 데이터를 관리하는 관리자에 이르기까지 MongoDB를 다루는 모든 사람에게 이 명령어들을 마스터하는 것은 필수적입니다.
이 종합 가이드는 CRUD 작업을 수행하기 위한 핵심 MongoDB 명령어를 안내합니다. 실용적이고 이해하기 쉬운 예제를 통해 insert, find, update, delete 명령어를 다루면서 데이터를 효율적으로 관리할 수 있는 지식을 제공합니다. 이 글을 마칠 때쯤이면 MongoDB 컬렉션과 효과적이고 자신 있게 상호 작용하는 방법에 대한 확실한 이해를 갖게 될 것입니다.
사전 준비 사항
명령어에 뛰어들기 전에 다음 사항을 확인하십시오:
- MongoDB 설치 및 실행 중: 공식 MongoDB 웹사이트에서 다운로드하거나 MongoDB Atlas와 같은 클라우드 서비스를 사용할 수 있습니다.
mongosh(MongoDB 셸) 설치됨: 이것은 MongoDB를 위한 대화형 JavaScript 인터페이스입니다.
MongoDB 연결 및 데이터베이스 선택
시작하려면 터미널 또는 명령 프롬프트를 열고 mongosh를 사용하여 MongoDB 인스턴스에 연결하십시오:
mongosh
연결되면 기본 test 데이터베이스에 있게 됩니다. 새 데이터베이스로 전환하거나 생성하려면 use 명령어를 사용하십시오:
use myDatabase;
myDatabase가 존재하지 않으면, 컬렉션에 첫 번째 문서를 삽입할 때 MongoDB가 암시적으로 생성합니다.
생성 작업 (삽입)
생성 작업은 컬렉션에 새 문서를 추가하는 것을 포함합니다. MongoDB는 단일 또는 여러 문서를 삽입하는 메서드를 제공합니다.
1. db.collection.insertOne()
이 메서드는 단일 문서를 컬렉션에 삽입합니다. 컬렉션이 존재하지 않으면 MongoDB가 생성합니다.
// 'users'라는 컬렉션 선택
db.users.insertOne({
name: "Alice Smith",
age: 30,
city: "New York",
email: "[email protected]",
interests: ["reading", "hiking"]
});
출력은 acknowledged 상태와 새 문서의 insertedId를 보여줄 것입니다.
2. db.collection.insertMany()
이 메서드를 사용하여 단일 작업으로 여러 문서를 컬렉션에 삽입합니다. 문서 배열을 인자로 받습니다.
db.users.insertMany([
{
name: "Bob Johnson",
age: 24,
city: "Los Angeles",
email: "[email protected]",
interests: ["coding", "gaming"]
},
{
name: "Charlie Brown",
age: 35,
city: "New York",
email: "[email protected]",
interests: ["cooking", "photography"]
},
{
name: "Diana Prince",
age: 29,
city: "London",
email: "[email protected]",
interests: ["fitness", "travel"]
}
]);
이것은 추가된 모든 문서의 insertedIds 배열을 반환할 것입니다.
팁:
_id필드(고유 ObjectId)를 제공하지 않으면 MongoDB가 각 문서에 자동으로 추가합니다.
읽기 작업 (검색)
읽기 작업은 컬렉션에서 문서를 쿼리하는 것을 포함합니다. find() 메서드는 이를 위한 주요 도구입니다.
1. db.collection.find()
a. 모든 문서 찾기
컬렉션의 모든 문서를 검색하려면 인자 없이 find()를 호출하십시오:
db.users.find();
b. 쿼리 필터로 문서 찾기
문서 선택 기준을 지정하기 위해 find()에 쿼리 문서를 전달하십시오. 이것은 SQL의 WHERE 절과 유사하게 작동합니다.
// 뉴욕 출신 사용자 찾기
db.users.find({ city: "New York" });
// 25세보다 나이가 많은 사용자 찾기
db.users.find({ age: { $gt: 25 } });
// 25세에서 35세 사이의 사용자 찾기 (35세 미만)
db.users.find({ age: { $gt: 25, $lt: 35 } });
// 'coding'을 관심사에 포함하는 사용자 찾기
db.users.find({ interests: "coding" });
// 'reading'과 'hiking'을 모두 관심사에 포함하는 사용자 찾기
db.users.find({ interests: { $all: ["reading", "hiking"] } });
// Alice Smith이거나 런던 출신인 사용자 찾기
db.users.find({
$or: [
{ name: "Alice Smith" },
{ city: "London" }
]
});
일반적인 쿼리 연산자:
* $eq: 같음 (연산자가 지정되지 않은 경우 기본값)
* $ne: 같지 않음
* $gt: 보다 큼
* $gte: 보다 크거나 같음
* $lt: 보다 작음
* $lte: 보다 작거나 같음
* $in: 배열에 지정된 값 중 하나와 일치
* $nin: 배열에 지정된 값 중 어느 것과도 일치하지 않음
* $and, $or, $not, $nor: 논리 연산자
c. 프로젝션: 특정 필드 선택
필드의 하위 집합만 반환하려면 프로젝션 문서를 find()의 두 번째 인자로 전달하십시오. 값 1은 필드를 포함하고, 0은 제외합니다. _id 필드는 명시적으로 제외하지 않는 한 기본적으로 포함됩니다.
// 이름과 이메일만 반환하고, _id는 제외
db.users.find({ city: "New York" }, { name: 1, email: 1, _id: 0 });
d. 정렬, 제한 및 건너뛰기
메서드 체이닝을 통해 더 복잡한 쿼리가 가능합니다:
// 나이를 내림차순으로 정렬 (1은 오름차순, -1은 내림차순)
db.users.find().sort({ age: -1 });
// 결과를 2개 문서로 제한
db.users.find().limit(2);
// 처음 2개 문서를 건너뛰고 나머지를 반환
db.users.find().skip(2);
// 작업 결합: 뉴욕 출신 사용자 찾기, 나이로 정렬, 1개 건너뛰기, 1개로 제한
db.users.find({ city: "New York" }).sort({ age: 1 }).skip(1).limit(1);
2. db.collection.findOne()
이 메서드는 쿼리 기준과 일치하는 단일 문서를 반환합니다. 여러 문서가 일치하는 경우, 처음 발견된 문서를 반환합니다.
db.users.findOne({ name: "Alice Smith" });
업데이트 작업
업데이트 작업은 컬렉션의 기존 문서를 수정합니다. 단일 문서, 여러 문서 또는 전체 문서를 교체할 수 있습니다.
1. db.collection.updateOne()
필터 기준과 일치하는 단일 문서를 업데이트합니다.
// Alice의 도시를 'San Francisco'로 업데이트
db.users.updateOne(
{ name: "Alice Smith" },
{ $set: { city: "San Francisco", lastUpdated: new Date() } }
);
2. db.collection.updateMany()
필터 기준과 일치하는 모든 문서를 업데이트합니다.
// 뉴욕에 있는 모든 사용자의 나이를 1씩 증가
db.users.updateMany(
{ city: "New York" },
{ $inc: { age: 1 } }
);
// 'reading'을 아직 가지고 있지 않은 사용자에게 새 관심사 'reading' 추가
db.users.updateMany(
{}, // 모든 문서에 적용
{ $addToSet: { interests: "reading" } }
);
// Bob Johnson의 관심사에서 'gaming' 제거
db.users.updateOne(
{ name: "Bob Johnson" },
{ $pull: { interests: "gaming" } }
);
일반적인 업데이트 연산자:
* $set: 문서의 필드 값을 설정합니다. 필드가 없으면 생성합니다.
* $inc: 필드 값을 지정된 양만큼 증가시킵니다.
* $unset: 문서에서 필드를 제거합니다.
* $push: 배열 필드에 값을 추가합니다.
* $pull: 배열에서 지정된 쿼리와 일치하는 값 또는 모든 인스턴스를 제거합니다.
* $addToSet: 값이 배열에 아직 없으면 추가합니다.
3. db.collection.replaceOne()
필터 기준과 일치하는 단일 문서를 새 문서로 교체합니다. 교체되는 문서의 _id 필드는 변경할 수 없습니다.
// Bob Johnson의 문서를 완전히 교체
db.users.replaceOne(
{ name: "Bob Johnson" },
{
name: "Robert Johnson",
occupation: "Software Engineer",
status: "active",
email: "[email protected]"
}
);
Upsert 옵션
updateOne()과 updateMany()는 모두 upsert 옵션을 지원합니다. true로 설정되고 필터와 일치하는 문서가 없으면 MongoDB는 쿼리 및 업데이트 작업을 기반으로 새 문서를 삽입합니다.
db.users.updateOne(
{ name: "David Lee" },
{ $set: { age: 28, city: "Seattle" } },
{ upsert: true } // David Lee가 존재하지 않으면 생성
);
삭제 작업
삭제 작업은 컬렉션에서 문서를 제거합니다. 삭제 작업은 되돌릴 수 없으므로 극도로 주의하십시오.
1. db.collection.deleteOne()
지정된 필터와 일치하는 최대 하나의 문서를 삭제합니다.
// 'Robert Johnson'이라는 사용자 삭제 (이전 'Bob Johnson')
db.users.deleteOne({ name: "Robert Johnson" });
2. db.collection.deleteMany()
지정된 필터와 일치하는 모든 문서를 삭제합니다.
// 런던 출신 모든 사용자 삭제
db.users.deleteMany({ city: "London" });
경고: 컬렉션의 모든 문서를 삭제하려면 빈 필터
{}를 사용하십시오. 이 작업은 되돌릴 수 없으므로 극도로 주의하십시오:
javascript db.users.deleteMany({}); // 'users' 컬렉션의 모든 문서 삭제
3. db.collection.drop()
이 메서드는 데이터베이스에서 해당 컬렉션 전체(모든 문서 및 인덱스 포함)를 영구적으로 제거합니다.
db.users.drop(); // 'users' 컬렉션 전체 삭제
경고: 컬렉션을 삭제하는 것은 매우 파괴적인 작업입니다. 이 명령어를 실행하기 전에 적절한 백업이 있는지 또는 절대적으로 확실한지 확인하십시오.
MongoDB CRUD 모범 사례
- 인덱싱: 자주 쿼리되는 필드의 경우, 인덱스를 생성하여 읽기 작업을 크게 가속화하십시오.
db.collection.createIndex({ fieldName: 1 }). - 프로젝션: 필요한 데이터만 검색하십시오. 프로젝션(
{ field: 1 })을 사용하면 네트워크 대역폭과 메모리 사용량이 줄어듭니다. - 배치 작업: 많은 문서를 삽입, 업데이트 또는 삭제할 때 개별 작업 대신
insertMany(),updateMany(),deleteMany()를 사용하여 오버헤드를 줄이십시오. - 연산자 이해: MongoDB의 풍부한 쿼리 및 업데이트 연산자 세트에 익숙해지십시오. 이들은 데이터를 조작하는 강력한 방법을 제공합니다.
- 오류 처리: 프로덕션 애플리케이션에서는 데이터베이스 작업에 대한 강력한 오류 처리를 항상 구현하십시오.
- 스키마 설계: MongoDB는 스키마가 없지만, 신중한 스키마 설계는 효율적인 쿼리 및 데이터 일관성을 위해 중요합니다.
결론
MongoDB의 CRUD 작업을 마스터하는 것은 효과적인 데이터 관리 및 애플리케이션 개발에 필수적입니다. 이 가이드는 필수적인 insert, find, update, delete 명령어에 대한 실용적인 지침을 예제와 모범 사례와 함께 제공했습니다.
문서를 생성, 읽기, 업데이트 및 삭제하는 방법을 이해함으로써 MongoDB 데이터베이스와 효율적으로 상호 작용하기 위한 핵심 기술을 습득했습니다. 이러한 명령어를 계속 연습하고 집계 파이프라인, 트랜잭션 및 인덱싱 전략과 같은 고급 기능을 탐색하여 MongoDB 전문 지식을 더욱 향상시키십시오.