首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一次删除大量文档(例如1000+文档)时,Firestore挂起

一次删除大量文档(例如1000+文档)时,Firestore挂起
EN

Stack Overflow用户
提问于 2020-08-19 14:13:47
回答 1查看 129关注 0票数 0

我正在尝试允许用户批量删除一堆文档。当文档不是很多时,它工作得很好,但当有大量文档(例如1000+文档)时,它会删除所有文档,然后就会挂起。如果我关闭并重新打开应用程序,我会看到所有文档都已根据需要删除。

我的代码是:

代码语言:javascript
运行
复制
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“,但应用程序随后会挂起:

代码语言:javascript
运行
复制
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")
  }
}

有没有理由在批量删除一堆文档后挂起,但在较小的集合上工作得很好?

EN

回答 1

Stack Overflow用户

发布于 2020-08-19 18:25:46

如果要删除大型节点,可以考虑使用CLI工具,特别是“database:remove”。在这里查看官方参考:https://firebase.google.com/docs/cli?hl=en#rtdb-commands

根据前段时间Firebase的支持,“database :remove”命令将通过将数据库节点分成块来删除它们,从而防止数据库实例锁定。

查看相关问题:how can I kill a Firebase transaction?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63480980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档