Node.js - MongoDB 업데이트: 초보자를 위한 종합 가이드

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 Node.js를 사용한 MongoDB 업데이트의 흥미로운 여정을 시작할 것입니다. 저는 이 주제를 처음 가르쳤을 때 학생들의 얼굴에 흥분과 혼란이 뒤섞인 표정을 종종 봤습니다. 하지만 걱정 마세요, 이 튜토리얼이 끝나면 여러분은 MongoDB 문서를 마치 프로처럼 업데이트할 수 있을 것입니다!

Node.js - MongoDB Update

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