如何在Firebase中动态更新集合中的文档

时间:2018-09-07 16:09:11

标签: javascript firebase google-cloud-firestore

我已经能够在Firebase中动态创建记录(用户个人资料)并检索其唯一ID。

但是现在我希望能够让最终用户更新其个人资料。虽然我可以检索配置文件的文档ID(也称为uid)。如何模板化动态获取已登录用户的uid并更新该特定记录的功能?

我尝试了以下方法:

 async updateProfile() {
    const docRef = await db.collection("users").get(`${this.userId}`);
    docRef.update({
      optInTexts: this.form.optInTexts,
      phone: this.form.mobile
    });
    db.collection("users")
      .update({
        optInTexts: this.form.optInTexts,
        phone: this.form.mobile
      })
      .then(function () {
        console.log("Profile successfully updated!");
      })
      .catch(function (error) {
        console.error("Error updating document: ", error);
      });
  }

`

我也尝试过

 async updateProfile() {
    const docRef = await db.collection("users").where("userId", "==", `${this.userId}`);
    docRef.update({
      optInTexts: this.form.optInTexts,
      phone: this.form.mobile
    });
    db.collection("users")
      .update({
        optInTexts: this.form.optInTexts,
        phone: this.form.mobile
      })
      .then(function () {
        console.log("Profile successfully updated!");
      })
      .catch(function (error) {
        console.error("Error updating document: ", error);
      });
  }

``

还有这个

  async updateProfile() {
    const docRef = await db.collection("users").get(`${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("Profile successfully updated!");
      })
      .catch(function (error) {
        console.error("Error updating document: ", error);
      });
  }

错误docRef.update is not a function

1 个答案:

答案 0 :(得分:0)

查看这篇文章: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);
        });
      })
  }