【发布时间】:2020-08-19 06:13:47
【问题描述】:
我试图让用户批量删除一堆文档。当没有那么多文档但有大量文档(例如 1000 多个文档)时,它可以正常工作,它会删除所有文档然后挂起。如果我关闭然后重新打开应用程序,我会看到所有文档都已根据需要删除。
我的代码是:
let query = self.collection.whereField("about", isEqualTo: self.about!.uid!).whereField("dataSource", isEqualTo: "appleHealth")
query.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
document.reference.delete()
}
}
}
我也尝试在后台队列中运行它,但遇到了同样的问题。它打印“这是在主队列上运行,在外部块中的前一个代码之后”,但应用程序只是在之后挂起:
DispatchQueue.global(qos: .background).async {
print("This is run on the background queue")
let query = self.collection.whereField("about", isEqualTo: self.about!.uid!).whereField("dataSource", isEqualTo: "appleHealth")
query.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
document.reference.delete()
}
}
}
DispatchQueue.main.async {
print("This is run on the main queue, after the previous code in outer block")
}
}
这是否有理由在大量删除一堆文档后挂起,但在较小的集合上工作正常?
【问题讨论】:
-
您好,您的代码在哪里运行。您可能会在 SO 上找到这个答案,很有用
-
最好重新设计你的firebase数据库结构,这样你就可以删除整个节点,而不是循环中一个一个地删除引用。
标签: swift firebase google-cloud-firestore