Firebase更新功能,覆盖数据

时间:2020-07-21 23:38:24

标签: reactjs firebase google-cloud-firestore

我像波纹管一样火力四射。我想通过更新将新项目添加到点赞数组。我的问题是,当我尝试执行更新功能时,它会覆盖Likes数组中的其他数据。 这是代码:

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

Firebase look:

1 个答案:

答案 0 :(得分:0)

尽管update可以更新特定的字段,但它将始终覆盖整个字段。因此,您的代码将用您在likes调用中传递的值替换整个update数组。

要更新Firestore文档中的数组,可以有两个选择:

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

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

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

仅当尚不存在usernameisLiked的组合时,上述代码才将其添加到数组中。

有关详细说明,请参见updating elements in an array上的文档和updating fields in nested objects上的部分,它们在类似的用例中也可能有用。