Firebase:从数组中删除对象

Posted

技术标签:

【中文标题】Firebase:从数组中删除对象【英文标题】:Firebase: Removing an Object from an Array 【发布时间】:2021-12-07 01:23:59 【问题描述】:

我正在尝试通过 SwiftUI 从 Firestore 中的数组中删除特定对象。以下函数删除整个监视列表。我错过了什么?

func removeFromWatchlist() 
        
    if let uid = Auth.auth().currentUser?.uid 
        let docRef = db.collection("user").document(uid)     // company.symbol = "AAPL"
        docRef.updateData(["watchlist": FieldValue.arrayRemove([company.symbol])])  error in
            if error == nil 
                print("Successful deleted array")
            
        
    

这是我的 Firestore 结构:

【问题讨论】:

观察列表看起来像一个对象映射而不是一个数组。您是否尝试过删除密钥本身?即updateData(["watchlist.AAPL": FieldValue.delete()])(我不是 Swift 开发人员,所以语法可能不正确,但这就是它的要点)。 Firebase 中的地图不是数组。数组的索引为 0-11,而不是图像上的名称。 【参考方案1】:

要使用 FieldValue.arrayRemove 从数组中删除项目,您必须指定存储在数组中的准确、完整的数据。

假设您的 company.symbolAAPL,则调用 FieldValue.arrayRemove([company.symbol] 会从数组中删除该确切字符串 - 而不是您拥有的带有对象的 AAPL 键。

您必须将整个数组从文档读取到您的应用程序代码中,将其删除,然后将整个修改后的数组写回文档。

【讨论】:

可能还值得强调的是arrayUnionarrayRemove 将用包含给定元素的数组(对于arrayUnion)或一个空数组(对于arrayRemove)替换所有非数组数据. 谢谢!现在可以使用了。

以上是关于Firebase:从数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Firebase 数据库中数组中的项目?

Flutter 和 Firebase:从 Firebase 中的数组中删除项目(地图)

从firebase删除时数组索引超出范围

试图快速删除从firebase检索到的数组中的重复值

Firebase Firestore:从文档数组中追加/删除项目

如何从firebase数据库中删除对象