Cloud Firestore - Firestore Database
Create
const {
initializeApp,
applicationDefault,
cert,
} = require("firebase-admin/app");
const {
getFirestore,
Timestamp,
FieldValue,
Filter,
} = require("firebase-admin/firestore");
const { onRequest } = require("firebase-functions/v2/https");
const logger = require("firebase-functions/logger");
const admin = require("firebase-admin");
// const serviceAccount = require("./serviceAccountKey.json");
initializeApp({
credential: applicationDefault(),
});
const db = getFirestore();
exports.create_estimate = onRequest((request, response) => {
let reqBody = request.body;
let reqParamCollection = request.query.collection;
let reqParamDoc = request.query.doc;
const res = db.collection(reqParamCollection).doc(reqParamDoc);
const resData = res.set(reqBody);
logger.info("Hello logs!", { structuredData: true });
response.send(reqBody);
});
Read
exports.read_estimate = onRequest(async (request, response) => {
let reqParamCollection = request.query.collection;
let reqParamDoc = request.query.doc;
const res = await db.collection(reqParamCollection).doc(reqParamDoc).get();
res.data();
logger.info("Hello logs!", { structuredData: true });
response.send(res.data());
});
Update
exports.update_estimate = onRequest(async (request, response) => {
let reqBody = request.body;
let reqParamCollection = request.query.collection;
let reqParamDoc = request.query.doc;
const res = await db
.collection(reqParamCollection)
.doc(reqParamDoc)
.update(reqBody);
logger.info("Hello logs!", { structuredData: true });
response.send("update success");
});
원래 데이터가 {"gd" : {"kid":"dz","adult":"dds"}}이고, collection.doc().update({"gd.kid": "sda"})를 사용하여
gd 필드의 kid 속성을 "sda"로 업데이트하면, 결과적으로 데이터는 {"gd" : {"kid":"sda","adult":"dds"}}로 업데이트 가능
원래 데이터가 {"array": ["item1", "item2", "item3"]}이고, collection.doc().update({"array.0": "newItem"})를 사용하여 배열의 첫 번째 요소를 "newItem"으로 업데이트하려고 한다면 이는 동작하지 않는다. 대신에 전체 배열을 대체해야 한다.
일반적으로 Firestore에서 문서를 업데이트할 때는 변경하려는 필드만 명시하는 것이 좋다.
이는 업데이트할 필드가 어떤 것인지 명확하게 알 수 있으며, 코드를 읽기 쉽고 유지 관리하기 쉽게 만들어준다.
따라서 변경하려는 필드와 값을 명시하여 update() 메서드에 전달하는 것이 일반적인 접근 방식이다.
이렇게 하면 업데이트할 필드만 변경되고, 다른 필드는 변경되지 않는다.
이는 필요한 최소한의 데이터만 전송하여 네트워크 대역폭을 절약하고, 성능을 향상시킬 수 있다.
그러나 필요에 따라 전체 객체나 배열을 대체하는 것이 더 간편할 수도 있다.
이 경우, 전체 객체나 배열을 새로운 값으로 대체하고 싶을 때 사용할 수 있다.
이 방법은 전체 객체나 배열을 다시 만들어야 하기 때문에 데이터의 양이 많을 때는 비용이 더 많이 들 수 있다.
따라서 업데이트할 필드를 명시적으로 지정하는 것이 일반적으로 권장되는 방법이지만, 상황에 따라 전체 객체나 배열을 대체하는 것이 더 적합할 수도 있다.
Delete
exports.delete_estimate = onRequest(async (request, response) => {
let reqBody = request.body;
let reqParamCollection = request.query.collection;
let reqParamDoc = request.query.doc;
const res = await db.collection(reqParamCollection).doc(reqParamDoc).delete();
logger.info("Hello logs!", { structuredData: true });
response.send();
});
'잡다한 공부 > DB' 카테고리의 다른 글
Prepared Statement에 대해 (0) | 2025.02.19 |
---|---|
[FireBase] 실습-3 (0) | 2024.03.16 |
[FireBase] 실습-1 (0) | 2024.03.16 |
Mybatis VS JPA (0) | 2024.02.26 |
트랜잭션이란? (1) | 2024.01.08 |
댓글