κ²μν κΈ°λ₯μ ꡬννλ μ€...
λλ κ²μκΈλ€μ BoardsλΌλ 컬λ μ
μ μ μ₯νκ³ , 컬λ μ
μμ μλ λνλ©νΈλ€μ μλμ²λΌ μκ²Όλ€.
(컬λ μ
μ ν΄λ κ°μ κ°λ
μ΄κ³ , λνλ©νΈλ ν΄λ μμ μλ λ°μ΄ν°λΌκ³ 보μλ©΄ λ©λλ€!)
type: "buy"
title: "μ λͺ©μ
λλ€."
body : "λ³Έλ¬Έμ
λλ€."
cart : [μμ΄ν
1, μμ΄ν
2, ...]
createdAt : 1679991242163
creatorDisplayName: "μ§μ"
creatorId: "WOhBdlm4TZdXc5SdV51xcSY62"
done: false
μ΄μ μ¬κΈ°μ κ²μκΈλ§λ€ λκΈλ€μ μ μ₯ν΄μΌνλλ°, cartμ²λΌ λκΈλ κ·Έλ₯ λ°°μ΄λ‘ κ΄λ¦¬ν΄λ λμ§ μλ..? μΆμμ§λ§ λμ€μ κ²μκΈμ μμ (update)ν μ μλ κΆνμ κ²μκΈ μμ±μλ§ κ°λ₯νλλ‘ λ³΄μ κ·μΉμ μμ±ν κ²μ΄μκΈ° λλ¬Έμ, λκΈμ νμ 컬λ μ μ λ§λ€μ΄ λ°λ‘ κ΄λ¦¬νκΈ°λ‘ νλ€.
κ·Έλ°λ° 곡μλ¬Έμμ νμ 컬λ μ
μ μ‘΄μ¬μ λν μ€λͺ
μ μμμ§λ§ νμ 컬λ μ
μ μΆκ°νκ³ μ½μ΄μ€λ λ²μ μ무리 λ€μ Έλ΄λ μ€λͺ
μ΄λ μμ μ½λκ° μμλ€..
νμ°Έ ꡬκΈλ§νλ€κ° μ°Ύμλκ³ ..! λΈλ‘κ·Έμ μ 리ν΄λλ €κ³ νλ€ πΊ
import { db } from '../../fbase';
import { doc, setDoc, collection } from 'firebase/firestore';
...
const docRef = doc(collection(db, [컬λ μ
λͺ
], [λνλ©νΈλͺ
], [νμ 컬λ μ
λͺ
]));
await setDoc(docRef, [μ μ₯ν λ°μ΄ν°]);
try {
const commentRef = doc(collection(db, 'Boards', id, 'Comments'));
await setDoc(commentRef, requestData);
alert('μμ±νμ΅λλ€.');
} catch (error) {
console.log(error);
} finally {
setCommentInput('');
getComments();
}
μ΄λ κ² μμ±νλ©΄ BoardsλΌλ 컬λ μ
μμ μλ idκ°μ ν΄λΉνλ λ¬Έμμ CommentsλΌλ νμ 컬λ μ
μ΄ μΆκ°λκ³ , νμ 컬λ μ
μμλ λλ€ν idλ‘ λνλ©νΈκ° μμ±λμ΄ requestData
κ° λ΄κΈ΄λ€.
πΌ CommentsλΌλ μ΄λ¦μΌλ‘ νμ 컬λ μ
μ΄ μμ±λ κ²μ νμΈν μ μλ€.
πΌ Comments 컬λ μ μμ λ¬Έμ(document)κ° λλ€ν μ΄λ¦μΌλ‘ μμ±λμλ€. documentμλ λ΄κ° requestDataλ‘ μ μ‘ν κ°μ΄ κ·Έλλ‘ λ΄κ²¨μλ€.
import { db } from '../fbase';
import { collection, getDocs, query, orderBy } from 'firebase/firestore';
...
const q = query(collection(db, [컬λ μ
λͺ
], [λνλ©νΈλͺ
], [νμ 컬λ μ
λͺ
]));
// const q = query(collection(db, `컬λ μ
λͺ
/λνλ©νΈλͺ
/νμ 컬λ μ
λͺ
`)); μ΄ λ°©λ²λ κ°λ₯νλ€.
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
const docObj = {
...doc.data(),
id: doc.id,
};
const getComments = async () => {
const q = query(collection(db, 'Boards', id, 'Comments'), orderBy('createdAt', 'desc'));
// const q = query(collection(db, `Boards/${id}/Comments`), orderBy('createdAt', 'desc'));
const querySnapshot = await getDocs(q);
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
const docObj = {
...doc.data(),
commentId: doc.id,
};
setComments((comments) => [...comments, docObj]);
});
};
πΌ μ΄λ κ² Comments 컬λ μ
μ λ΄κΈ΄ λνλ©νΈλ€μ΄ μ λ°μμμ§λ κ²μ νμΈν μ μλ€.
λλ λκΈμ μ΅μ μμΌλ‘ μ λ ¬νκΈ° μν΄ orderBy()
λ μΆκ°νμ¬ μ¬μ©νλ€.
import { doc, deleteDoc } from 'firebase/firestore';
...
const desertRef = doc(db, [컬λ μ
λͺ
], [λνλ©νΈλͺ
], [νμ컬λ μ
λͺ
], [μμ ν λνλ©νΈλͺ
]);
await deleteDoc(desertRef);
const deleteComment = async (commentId: string) => {
const confirm = window.confirm('μ λ§λ‘ μμ νκ² μ΅λκΉ?');
if (confirm) {
const desertRef = doc(db, 'Boards', id, 'Comments', commentId);
try {
await deleteDoc(desertRef);
} catch (error) {
console.log(error);
}
}
};
μ΄λ κ² μμ±νλ©΄ κ²μν 컬λ μ (Boards) μμ β‘οΈ κ²μκΈ λνλ©νΈ(id) μμ β‘οΈ νμ 컬λ μ (Comments) μμ β‘οΈ commentIdλ₯Ό μ΄λ¦μΌλ‘ κ°μ§ λκΈ λνλ©νΈλ₯Ό μμ ν μ μλ€.
μ¨ π
μ΄ κΈμ μλ λ§ν¬λ₯Ό μ°Έκ³ νμ¬ μμ±ν κΈμ
λλ€.
How to Add a Subcollection to a Document in Firebase Cloud Firestore?
FirebaseError: Invalid collection reference. Collection references must have an odd number of segments, but services/p0dnjzr7HZrcp6Mifiqh has 2
μ°μ€μ€ μ°Έκ³ ν κΈλ€μ΄ λ³΄κΈ°λ§ ν΄λ λ¨Έλ¦¬κ° νν λλ€μ γ γ γ
μ€.. νμ΄μ΄λ² μ΄μ€ μ¬μ© μ€μ΄μ κ°μ? Vercel, Netlifyλ§ μΌμλλ° μ΄κ²λ λμ€μ μΈ μκ° μμλλ° μ λ³΄κ² μλλ€
μ°μ μ±ν ... λ무 λ©μ§λλ€ νμ΄μ΄λ² μ΄μ€ μ¬μ©ν λ μ°Έκ³ νλ©΄ μ’μκ² κ°μμ !