如何从Firebase中的嵌套文档中删除数组项?

时间:2019-04-26 21:41:27

标签: javascript firebase google-cloud-firestore

我正在使用Vue,firebase应用程序,并将userevents保存在firebase集合中,我在用户安排事件时更新此userevents数组,并希望在用户取消或删除事件时将其删除,< / p>

users(collection) -
 test123(document) -
      "id" . --fields
      "username" . --fields
      "userevents" . --array
         [0]
            "eventid"
            "date"
            "desc"
            "status"
         [1]
            "eventid"
            "date"
            "desc"
            "status"

在UI中,如果用户取消了一个事件,我将拥有eventid,并希望将其从userevents数组中删除。 我尝试使用下面的代码从数组中删除项目,但它正在从userevents中删除所有项目,

userRef.update({
    eventid: firebase.firestore.FieldValue.delete()
});

在firebase中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

Firestore当前不支持仅使用数组中元素的字段(在您的情况下为eventid)来删除数组中的元素。有两种解决方法:

方法1

您可以使用FieldValue.arrayRemove从数组中按值删除元素。该值必须与数组中的整个元素匹配,它将删除数组中与该值匹配的所有元素。您可以阅读有关此内容的更多信息,并可以常规地here来操作数组。由于您的数组元素是对象,因此代码如下所示:

userRef.update({
    "userevents": firebase.firestore.FieldValue.arrayRemove({"eventid": ..., "date": ..., "desc":..., "status":...})
});

方法2

您当前正在将对象存储在数组中。您可以做的是使userevents成为映射(对象)而不是数组。假设eventid是唯一的,您可以按eventid为地图建立索引,然后像这样从地图中删除条目:

userRef.update({
    ['userevents.' + eventid]: firebase.firestore.FieldValue.delete()
});