更新 firebase Doc 中的单个值
Updating a single value in firebase Doc
第一次使用 firebase,我正在创建一个博客,当我创建一个 post 时,我将其创建为:
const postCollection = collection(database, "posts");
const submitPost = async () => {
await addDoc(postCollection, {
title,
body,
comments: [],
liked: false,
user: { name: auth.currentUser.displayName, id: auth.currentUser.uid },
});
};
在每个 post 下面我都有一个评论部分,但我对添加评论有点困惑。
我试过这个:
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
await setDoc(targetPost, { ...targetPost, comments: [comment] });
};
但是没有用。
提前致谢
如果 post 已经存在,那么您可以使用 updateDoc()
来更新该文档中的特定字段,而不是 setDoc()
,后者将覆盖文档(如果存在)。由于 'comments' 是一个数组,您可以使用 arrayUnion()
将新评论推送到您的 post,如下所示:
import { doc, updateDoc, arrayUnion } from "firebase/firestore";
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
await updateDoc(targetPost, {
comments: arrayUnion(comment)
});
};
如果您需要更新特定评论,请不要那样做,那么您必须阅读整个 post 文档,手动更新评论数组,然后将整个评论数组写回:
import { doc, getDoc, updateDoc } from "firebase/firestore";
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
const snapshot = await getDoc(targetPost)
await updateDoc(targetPost, {
comments: [...snapshot.data().comments, comment]
});
};
同时结帐:
要删除特定评论,如果您知道确切的 comment
对象,可以使用 arrayRemove()
。
第一次使用 firebase,我正在创建一个博客,当我创建一个 post 时,我将其创建为:
const postCollection = collection(database, "posts");
const submitPost = async () => {
await addDoc(postCollection, {
title,
body,
comments: [],
liked: false,
user: { name: auth.currentUser.displayName, id: auth.currentUser.uid },
});
};
在每个 post 下面我都有一个评论部分,但我对添加评论有点困惑。
我试过这个:
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
await setDoc(targetPost, { ...targetPost, comments: [comment] });
};
但是没有用。 提前致谢
如果 post 已经存在,那么您可以使用 updateDoc()
来更新该文档中的特定字段,而不是 setDoc()
,后者将覆盖文档(如果存在)。由于 'comments' 是一个数组,您可以使用 arrayUnion()
将新评论推送到您的 post,如下所示:
import { doc, updateDoc, arrayUnion } from "firebase/firestore";
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
await updateDoc(targetPost, {
comments: arrayUnion(comment)
});
};
如果您需要更新特定评论,请不要那样做,那么您必须阅读整个 post 文档,手动更新评论数组,然后将整个评论数组写回:
import { doc, getDoc, updateDoc } from "firebase/firestore";
const addComment = async (id) => {
const targetPost = doc(database, "posts", id);
const snapshot = await getDoc(targetPost)
await updateDoc(targetPost, {
comments: [...snapshot.data().comments, comment]
});
};
同时结帐:
要删除特定评论,如果您知道确切的 comment
对象,可以使用 arrayRemove()
。