//5) 문서수정 (updateDoc, doc)
import { deleteField, increment, serverTimestamp, updateDoc } from "firebase/firestore";
//updateBook이라는 비동기 함수 선언
const updateBook = async(bookId) => { //매개변수 bookId → 수정할 문서의 ID
try { //try : 예외(오류)가 날 수 있는 코드를 감싸는 블록
await updateDoc(doc(db, 'books', bookId), { //updateDoc에 전달하는 객체: 수정할 필드와 값
title:'수정 테스트', //수정 테스트"로 변경
author: deleteField(), //기존 필드 삭제 (deleteField())
price: increment(5000), //기존 값에 5000 더하기 (increment(5000))
createdAt: serverTimestamp() //서버 시간으로 설정 (serverTimestamp())
});
console.log('문서 수정 완료');
}catch(error) { //catch : try 안에서 에러가 생겼을 때 실행되는 부분.
console.log('문서 수정오류')
}
}
updateBook('bk_001'); //bookId가 'bk_001'인 문서를 수정하도록 함수 호출
updateDoc — Firestore 문서 수정 함수Firestore(데이터베이스)에서 기존 문서의 일부 필드만 수정할 때 사용하는 함수
await updateDoc(문서참조, { 수정할필드: 값, ... })
await updateDoc(doc(db, "books", "bk_001"), {
price: 20000,
author: "황지원"
})
→ books 컬렉션의 "bk_001" 문서에서
price와 author 필드만 수정됨.
다른 필드(title, createdAt) 등은 그대로 유지됨.
try — 예외(오류)가 날 수 있는 코드를 감싸는 블록에러가 발생할 가능성이 있는 코드를 시도(try) 해보는 영역이에요.
try {
// 예외가 발생할 수 있는 코드
await updateDoc(...)
console.log('수정 성공');
}
catch — 에러(예외) 잡아서 처리하는 블록
try안에서 에러가 생겼을 때 실행되는 부분.
catch(error) {
console.log('문서 수정오류', error);
}
error 안에는 실제 오류 정보가 담김try {
await updateDoc(doc(db, 'books', 'bk_001'), { title: '테스트' });
console.log('수정 완료');
} catch (error) {
console.log('수정 실패:', error);
}
| 상황 | 동작 |
|---|---|
| 문서 수정 성공 | "수정 완료" 출력 |
| 문서 없음 / 네트워크 문제 등 발생 | catch로 이동 → "수정 실패" 출력 |
| 개념 | 설명 | 비고 |
|---|---|---|
updateDoc() | Firestore 문서 일부만 수정 | 문서 없으면 오류 발생 |
try | 에러 날 수도 있는 코드 감싸기 | 정상 실행 시 catch로 안 감 |
catch | 에러 발생 시 실행되는 블록 | 에러 정보 확인 가능 |