如何在Firebase的集合中动态更新文档。
如何在Firebase的集合中动态更新文档。
我已经能够动态创建记录(用户配置文件)并检索它们在Firebase中的唯一ID。
但是现在我想让最终用户更新他们的配置文件。虽然我可以检索配置文件的文档ID(即uid),但是如何编写模板以动态获取已登录用户的uid并更新该特定记录呢?
我尝试了以下方法:
async updateProfile() { const docRef = await db.collection("users").doc(this.userId); docRef.update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }); db.collection("users") .doc(this.userId) .update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }) .then(function () { console.log("配置文件成功更新!"); }) .catch(function (error) { console.error("更新文档时出错:", error); }); }
我还尝试了这个方法:
async updateProfile() { const docRef = await db.collection("users").where("userId", "==", this.userId).get(); docRef.docs[0].ref.update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }); db.collection("users") .doc(this.userId) .update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }) .then(function () { console.log("配置文件成功更新!"); }) .catch(function (error) { console.error("更新文档时出错:", error); }); }
以及这个方法:
async updateProfile() { const docRef = await db.collection("users").doc(this.userId); docRef.update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }); db.collection(`users/${this.userId}`) .update({ optInTexts: this.form.optInTexts, phone: this.form.mobile }) .then(function () { console.log("配置文件成功更新!"); }) .catch(function (error) { console.error("更新文档时出错:", error); }); }
错误信息:`docRef.update不是一个函数`。
如何在 Firebase 中动态更新集合中的文档
问题的出现原因:
我遇到了一个问题,我想要动态更新 Firebase 中集合中的文档,但是我不知道如何实现。在经过一些研究后,我找到了一个与我的问题相关的帖子。
解决方法:
通过阅读这篇帖子:How to update a single firebase firestore document,我成功解决了这个问题。我正在尝试引用的集合是一个用户表,其中的数据是通过 Firebase 的内置 Google 身份验证创建的。因此,查询和更新数据与我的其他数据不同,因为文档 ID 等于集合的 uid。下面是解决方案的代码示例:
async updateProfile() { const e164 = this.concatenateToE164(); const data = { optInTexts: this.form.optInTexts, phone: e164 }; const user = await db.collection('users') .where("uid", "==", this.userId) .get() .then(snapshot => { snapshot.forEach(function(doc) { db.collection("users").doc(doc.id).update(data); }); }) }
通过以上代码,我可以通过查询用户的 uid 并更新相应的文档来实现动态更新集合中的文档。