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

标签 javascript firebase google-cloud-firestore

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

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

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

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

有没有办法在 Firebase 中实现这一点?

最佳答案

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

方法一

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

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

方法二

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

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

关于javascript - 如何从 firebase 中的嵌套文档中删除数组项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875241/

相关文章:

javascript - 使用 php get 将数据发送到 firebase

firebase - 找不到 com.google.firebase :firebase-core:10. 0.1

javascript - 如何等待 QueryDocumentSnapshot.docs.forEach 结束返回

javascript - jQuery 对象和参数 - 使用正确的术语/解释

javascript - 这两种onload方法有什么不同的做法&哪个更好

javascript - 将麦克风录音机从浏览器发送到谷歌语音到文本 - Javascript

ios - 从 Firebase 存储下载时出错

swift - 从 Firestore 填充 UITableView

sorting - Firestore 分页 - 是否有与 firebase 的 limitToLast 兼容的查询?

javascript - 显示用户刚刚选择的图片?