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.symbol
是 AAPL
,则调用 FieldValue.arrayRemove([company.symbol]
会从数组中删除该确切字符串 - 而不是您拥有的带有对象的 AAPL
键。
您必须将整个数组从文档读取到您的应用程序代码中,将其删除,然后将整个修改后的数组写回文档。
【讨论】:
可能还值得强调的是arrayUnion
和arrayRemove
将用包含给定元素的数组(对于arrayUnion
)或一个空数组(对于arrayRemove
)替换所有非数组数据.
谢谢!现在可以使用了。以上是关于Firebase:从数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 和 Firebase:从 Firebase 中的数组中删除项目(地图)