Node.js - MongoDB 업데이트: 초보자를 위한 종합 가이드
안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 Node.js를 사용한 MongoDB 업데이트의 흥미로운 여정을 시작할 것입니다. 저는 이 주제를 처음 가르쳤을 때 학생들의 얼굴에 흥분과 혼란이 뒤섞인 표정을 종종 봤습니다. 하지만 걱정 마세요, 이 튜토리얼이 끝나면 여러분은 MongoDB 문서를 마치 프로처럼 업데이트할 수 있을 것입니다!
MongoDB 업데이트 이해하기
구체적인 방법에 들어가기 전에 먼저 MongoDB에서 업데이트가 무엇을 의미하는지 이해해 보겠습니다. 상상해 보세요, 디지털 노트북(데이터베이스)에 가득 찬 정보 페이지(문서)가 있습니다. 가끔 이 페이지에 적혀진 것을 바꿔야 할 때가 있습니다. MongoDB에서의 업데이트는 precisely 이와 같은 일을 합니다 - 우리의 콜렉션 내에 있는 기존 문서를 수정할 수 있게 합니다.
업데이트 메서드
MongoDB는 문서를 업데이트하기 위한 두 가지 주요 메서드를 제공합니다:
메서드 | 설명 |
---|---|
updateOne() | 필터에 맞는 단일 문서를 업데이트합니다 |
updateMany() | 필터에 맞는 여러 문서를 업데이트합니다 |
이제 이 두 메서드를 자세히 탐구해 보겠습니다.
updateOne(): 정밀 업데이트
updateOne()
메서드는 정밀한 외과의사처럼 한 번에 한 개의 문서를 수정합니다. 정확히 어떤 문서를 변경하고 싶을 때 완벽합니다.
문법
db.collection.updateOne(filter, update, options)
이를 다음과 같이 설명할 수 있습니다:
-
filter
: 업데이트할 문서를 지정합니다 -
update
: 적용할 수정 사항을 정의합니다 -
options
: 업데이트 연산을 제어할 수 있는 선택적 매개변수
예제 1: 단일 필드 업데이트
상상해 보세요, 우리는 책의 컬렉션을 가지고 있고, "The Great Gatsby"의 가격을 업데이트하고 싶습니다. 이렇게 합니다:
const { MongoClient } = require('mongodb');
async function updateBookPrice() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");
const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
price: 15.99
},
};
const result = await books.updateOne(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} document`);
} finally {
await client.close();
}
}
updateBookPrice();
이 예제에서 우리는 $set
연산자를 사용하여 가격을 업데이트하고 있습니다. $set
연산자는 필드의 값을 지정된 값으로 대체합니다.
예제 2: 새 필드 추가
이제 우리는 "lastUpdated" 필드를 책 문서에 추가하고 싶습니다:
const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
lastUpdated: new Date()
},
};
const result = await books.updateOne(filter, updateDoc);
이렇게 하면 문서에 "lastUpdated" 필드가 현재 날짜와 시간으로 추가됩니다.
updateMany(): 대량 업데이트
occasionally, 여러 문서를 동시에 업데이트해야 할 때가 있습니다. 그때는 updateMany()
메서드가 유용합니다. 이 메서드는 교사가 한 번에 여러 시험지를 채점하는 것과 같습니다.
문법
db.collection.updateMany(filter, update, options)
이 매개변수는 updateOne()
과 동일하지만, 이 메서드는 필터에 맞는 모든 문서를 업데이트합니다.
예제 3: 여러 문서 업데이트
상상해 보세요, 우리는 가격이 $20 이상인 모든 책에 10% 할인을 적용하고 싶습니다:
async function applyDiscount() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");
const filter = { price: { $gt: 20 } };
const updateDoc = {
$mul: {
price: 0.9
},
};
const result = await books.updateMany(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} documents`);
} finally {
await client.close();
}
}
applyDiscount();
이 예제에서 우리는 $mul
연산자를 사용하여 가격을 0.9배로 곱하여 10% 할인을 적용하고 있습니다. $gt
연산자는 가격이 20보다 큰 모든 문서를 필터링합니다.
업데이트 연산자
MongoDB는 우리가 복잡한 업데이트를 수행할 수 있도록 다양한 업데이트 연산자를 제공합니다. 여기 몇 가지 가장 흔히 사용되는 연산자가 있습니다:
연산자 | 설명 |
---|---|
$set | 필드의 값을 설정합니다 |
$inc | 필드의 값을 지정된 양만큼 증가시킵니다 |
$mul | 필드의 값을 지정된 양만큼 곱합니다 |
$rename | 필드를 다른 이름으로 변경합니다 |
$unset | 문서에서 필드를 제거합니다 |
$min | 지정된 값이 현재 필드 값보다 작다면 필드를 업데이트합니다 |
$max | 지정된 값이 현재 필드 값보다 크다면 필드를 업데이트합니다 |
예제 4: 여러 연산자 사용
한 번에 여러 연산자를 사용하는 업데이트 연산을 보겠습니다:
const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: { author: "F. Scott Fitzgerald" },
$inc: { copiesSold: 1000 },
$rename: { "publishYear": "yearPublished" }
};
const result = await books.updateOne(filter, updateDoc);
이 업데이트 연산은 저자를 설정하고, 판매된 부수를 1000개 증가시키고, "publishYear" 필드를 "yearPublished"으로 변경합니다.
결론
이렇게 해서 우리는 MongoDB 업데이트의 세계를 여행하며, updateOne()
과 updateMany()
메서드를 탐구하고, 다양한 업데이트 연산자를 다루어 보았습니다. 연습이 완벽을 만든다는 것을 기억하며, 여러분의 프로젝트에서 이 메서드들을 실험해 보세요.
저는 항상 학생들에게 데이터베이스 연산을 배우는 것은 요리를 배우는 것과 같다고 말합니다 -처음에는 복잡해 보일 수 있지만, 한 번 익숙해지면 마스터 셰프가 고급 요리를 준비하는 것처럼 복잡한 쿼리를 만들 수 있을 것입니다!
계속 코딩하고, 배우고, 가장 중요한 것은 즐기세요! 다음 번에 만날 때까지, 행복하게 업데이트하세요!
Credits: Image by storyset