首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从firebase中的嵌套文档中删除数组项?

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

Stack Overflow用户
提问于 2019-04-27 05:41:27
回答 1查看 12.5K关注 0票数 10

我正在开发一个Vue,firebase应用程序,我将userevents保存在一个firebase集合中,当用户安排一个事件并想要在用户取消或删除它时将其删除时,我会更新这个userevents数组。

代码语言:javascript
复制
users(collection) -
 test123(document) -
      "id" . --fields
      "username" . --fields
      "userevents" . --array
         [0]
            "eventid"
            "date"
            "desc"
            "status"
         [1]
            "eventid"
            "date"
            "desc"
            "status"

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

代码语言:javascript
复制
userRef.update({
    eventid: firebase.firestore.FieldValue.delete()
});

在firebase中有没有实现这一点的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 07:38:54

Firestore目前不支持仅使用数组中的元素(在本例中为eventid)中的一个字段来删除该数组中的元素。有几种解决方法:

方法1

您可以使用FieldValue.arrayRemove通过值从数组中删除元素。该值必须与数组中的整个元素匹配,并且它将删除数组中与该值匹配的所有元素。您可以阅读更多关于这方面的内容,以及如何在通用here中操作数组。由于数组元素是对象,因此代码将如下所示:

代码语言:javascript
复制
userRef.update({
    "userevents": firebase.firestore.FieldValue.arrayRemove({"eventid": ..., "date": ..., "desc":..., "status":...})
});

方法2

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

代码语言:javascript
复制
userRef.update({
    ['userevents.' + eventid]: firebase.firestore.FieldValue.delete()
});
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55875241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档