我正在尝试允许用户批量删除一堆文档。当文档不是很多时,它工作得很好,但当有大量文档(例如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()
}
}
}我也尝试过在后台队列中运行它,但遇到了同样的问题。它会打印"This is run on the main queue,after the previous code in but block“,但应用程序随后会挂起:
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")
}
}有没有理由在批量删除一堆文档后挂起,但在较小的集合上工作得很好?
发布于 2020-08-19 18:25:46
如果要删除大型节点,可以考虑使用CLI工具,特别是“database:remove”。在这里查看官方参考:https://firebase.google.com/docs/cli?hl=en#rtdb-commands
根据前段时间Firebase的支持,“database :remove”命令将通过将数据库节点分成块来删除它们,从而防止数据库实例锁定。
https://stackoverflow.com/questions/63480980
复制相似问题