【问题标题】:Firebase: Removing an Object from an ArrayFirebase:从数组中删除对象
【发布时间】: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,而不是图像上的名称。

标签: firebase google-cloud-firestore swiftui


【解决方案1】:

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

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

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

【讨论】:

  • 可能还值得强调的是arrayUnionarrayRemove 将用包含给定元素的数组(对于arrayUnion)或一个空数组(对于arrayRemove)替换所有非数组数据.
  • 谢谢!现在可以使用了。
猜你喜欢
  • 2020-10-21
  • 2021-06-06
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 2016-05-19
  • 2011-04-04
  • 2013-03-16
相关资源
最近更新 更多