【问题标题】:Using firebase .update within a .where (instead of .doc)在 .where 中使用 firebase .update(而不是 .doc)
【发布时间】:2020-01-18 21:10:25
【问题描述】:

我是 firebase 新手,有点挣扎。

目前,我正在尝试在文档中更新用户中的数组。但是,我无法使用唯一 ID 将用户与当前用户匹配,因为每个用户的唯一 ID 都是他们的用户名,并且自创建以来可能已经更改。

我认为将文档用户与当前用户匹配的最佳方法是使用 .where().get(),然后使用“update()”更新数组。

现在,这就是我卡住的地方。在 firebase 文档中,他们使用 .update 的 example 附加到 .doc

var washingtonRef = db.collection("cities").doc("DC");

//Atomically add a new region to the "regions" array field.
washingtonRef.update({
  regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

但是,由于我使用的是 .where,我假设我必须使用引用和快照。但是,我不太确定引用在这种情况下如何工作,以及如何正确更新。

这是我经过一段时间的混乱后得到的代码,但无论我的变化如何,我都无法弄清楚。 (本质上,我想添加一个新项目(在本例中称为“新项目”到postedProjects 的用户数组中。)

 db.collection('users').where('user_id', '==', this.userInfo.user_id)
  .get()
  .then(function(querySnapshot)  {
    querySnapshot.forEach(function(doc) {

    doc.data().update({
      postedProjects: firebase.firestore.FieldValue.arrayUnion("new project")
    })
  })
})

这给了我“.update() 不是函数”的错误。

是否有人可以帮助我提供解决方案,向我展示如何在这种情况下正确使用引用?

【问题讨论】:

    标签: javascript firebase vue.js google-cloud-firestore


    【解决方案1】:

    你快到了。但是,您不能更新 DocumentSnapshot 的数据,因为那是文档数据的内存表示。相反,您需要获取 DocumentReference 并为此致电 update

    doc.ref.update({
      postedProjects: firebase.firestore.FieldValue.arrayUnion("new project")
    })
    

    【讨论】:

      【解决方案2】:

      您需要DocumentReference 才能update() 文档。其他都行不通。

      在您的代码中,doc 是一个 QueryDocumentSnapshot 类型的对象。如果您希望 DocumentReference 对象引用该快照中的文档,请使用其 ref 属性。

      doc.ref.update({
          postedProjects: firebase.firestore.FieldValue.arrayUnion("new project")
      })
      

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 2021-11-24
        • 1970-01-01
        • 2020-05-04
        • 2011-02-14
        • 2019-05-18
        • 1970-01-01
        • 2020-08-16
        • 2015-04-23
        相关资源
        最近更新 更多