【问题标题】:Cloud Firestore Swift: How to delete a query of documentsCloud Firestore Swift:如何删除文档查询
【发布时间】:2018-08-10 18:48:58
【问题描述】:

我想删除我的用户名集合中所有将字段 UID 作为当前用户 ID 的文档。到目前为止,这是我的代码:

let uid = Auth.auth().currentUser!.uid
db.collection("Usernames").whereField("UID", isEqualTo: uid).delete

但这里出现了错误:

“查询”类型的值没有成员“删除”。

对此有什么特殊的技巧吗?谢谢!

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    The guide 向您展示如何删除数据。它还指出,不应从客户端删除整个集合。无法从查询中删除 - 您必须获取所有文档并单独删除它们。如果有大量文档的潜力,那么您应该在服务器端执行此操作。如果您确定只有几个,您可以查询它们,获取文档引用,然后删除它们,如下所示:

    let uid = Auth.auth().currentUser!.uid
    db.collection("Usernames").whereField("UID", isEqualTo: uid).getDocuments() { (querySnapshot, err) in
      if let err = err {
        print("Error getting documents: \(err)")
      } else {
        for document in querySnapshot!.documents {
          document.reference.delete()
        }
      }
    }
    

    如果这是需要经常做的事情,那么这是检查您的数据结构的好机会。也许制作一个集合,其中用户的用户名列在他们的uid 下。然后,您可以只查询该单个文档并使用它来引用其他要删除的文档。

    Usernames: {
       byUID: {
            uid1: {
                funky_monkey: true,
                goodTimes: true
            }
       }
       byUsername: {
            funky_monkey: {
                UID: uid1
            }
       }
    }
    

    这只是一个建议。肯定有其他选项可能更适合您的应用程序。

    【讨论】:

    • 能否请您帮我如何将&& 逻辑操作放入whereField 子句中?例如:WhereField("UID", isEqualTo: uid ) && ("hello",isEqualTo: msg)
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2021-10-16
    • 2018-06-18
    • 2018-08-02
    • 2021-05-11
    • 2019-09-03
    • 2018-03-22
    • 2019-02-15
    相关资源
    最近更新 更多