首页 > 解决方案 > firebase 更新功能,覆盖数据

问题描述

我喜欢下面的火力基地。我想通过更新将新项目添加到喜欢数组中。我的问题是,当我尝试执行更新函数时,它会覆盖 likes 数组中的其他数据。这是代码:

db.collection("posts").doc(postId).update({likes :[{username: username, isLiked: true}]})

Firebase 外观:

标签: reactjsfirebasegoogle-cloud-firestore

解决方案


虽然update可以更新特定字段,但它总是会覆盖整个字段。因此,您的代码将整个likes数组替换为您在update调用中传递的值。

要更新 Firestore 文档中的数组,您有两种选择:

  1. 读取文档,从文档中获取现有值,更新值,写回整个数组。
  2. 如果新项目尚不存在,则将其合并到数组中。

鉴于您的用例,您似乎需要合并,这也是最简单的选择:

db.collection("posts").doc(postId)
  .update({likes : firebase.firestore.FieldValue.arrayUnion({username: username, isLiked: true})})

仅当该组合尚不存在时,上述代码才将 和 的组合添加username到数组中。isLiked

有关更详细的说明,请参阅有关更新数组中元素的文档,以及有关更新嵌套对象中的字段的部分,这在类似的用例中也很有用。


推荐阅读