다음 자료를 참조한다.
React & Firebase 연동하기/데이터 가져오기
※ 번역하면 문서라고 하고 Firestore 에도 문서로 되어있지만문서라고 하는 우리나라 단어의 뉘앙스와 그렇게 어울리지 않기 때문에원어 발음 그대로 '다큐먼트' 또는 '도큐먼트'라고도 함
※ 최상위에는 컬렉션이 위치하며 그 후로는 컬렉션과 다큐먼트가 서로를 포함할 수 있음
// Import the functions you need from the SDKs you need
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore/lite';
// 나중에 환경 변수 처리
const firebaseConfig = {
apiKey: '',
authDomain: '',
projectId: '',
storageBucket: '',
messagingSenderId: '',
appId: '',
measurementId: '',
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
export default db;

import {
doc,
getDoc,
setDoc,
updateDoc,
deleteDoc,
} from 'firebase/firestore/lite';
import db from './firebase';
const document = doc(db, 'test', 'testId');
// Read
const documentSnapshot = await getDoc(document);
if (!documentSnapshot.exists()) {
return null;
}
// Create
const setResult = await setDoc(document, { test3: '333', test4: '444' });
// Update
const updateResult = await updateDoc(document, {
test3: '333',
test4: '555',
test5: '666',
});
// Delete
const deleteResult = await deleteDoc(document, 'testId');
콜렉션을 거쳐서 하나의 도큐먼트(document) 레퍼런스를 얻는다.
인자로 firebase.js 에서 초기화하며 export 해준 db, 조회하려는 Document가 속한 Collection, 해당 Collection의 Document를 넣는다.
doc 함수를 통해 구해준 도큐먼트 레퍼런스를 인자로 넣는다.
setDoc(reference, data, options)
doc 함수를 통해 구해준 도큐먼트 레퍼런스를 data의 내용으로 수정한다. 옵션이 없다면 기본적으로 data의 값으로 전체 수정, 대체가 되어 기존 데이터는 사라진다.
옵션 값으로는 다음과 같다. {merge : true) 옵션을 통해 기존의 값을 보존하며 병합하는 방식으로 사용할 수 있다.
export declare type SetOptions = {
readonly merge?: boolean;
} | {
readonly mergeFields?: Array<string | FieldPath>;
};
updateDoc(reference, data)
변경하려는 값이 이미 존재할 경우만 수정을 시도한다.
setDoc 함수를 항상 merge : ture 값으로 실행하는 것과 동일하다.
deleteDoc(reference)
레퍼런스 뿐만 아니라 콜렉션까지도 전부 삭제한다.
@firebase/firestore/lite | Firebase JavaScript API reference
putTableCheckIn: async (username, date, value) => {
const dayTableRef = doc(db, 'day_table', date);
const data = { [`${username}.checkIn`]: value };
let response;
try {
response = await updateDoc(dayTableRef, data);
} catch (e) {
alert(e);
}
return response;
}

위와 같은 firebase DB를 doc과 updateDoc을 이용해 특정 document(20240223)의 필드 값을 수정하는 코드이다.
doc을 이용해 dayTableRef에 조작하려는 document에 대한 정보를 받아온다. updateDoc을 이용해 해당 document의 값을 수정할 것인데, 이때 updateDoc의 두번째 인자로 그냥 body만 딸랑 적어놓으면 해당 document가 body만 남기고 나머지 값이 사라져버린다. 각각 필드를 객체처럼 사용하며 다양한 필드값을 저장하고 싶다면 body 부분에 해당 필드.속성값 형태로 적어주면 필드의 한 속성만 수정하는 게 가능해진다.