【问题标题】:How to delete Documents by Value name?如何按值名称删除文档?
【发布时间】:2021-04-27 22:03:00
【问题描述】:

是否可以在 Firestore 中删除某些“值名称”相同的文档?

例如:我在 Collection 中有一些 UID 作为 Documents。在这些文档中将保存两种类型的“值名称”。第一个“值名称”称为“byCar”。第二个“值名称”称为“byFoot”。现在我想删除所有“值名称”等于“byCar”的文档。 “值名称”为“byFoot”的所有其他文档将保持不变。这样的事情可能吗?

我在 Flutter / Dart 中编程,如果有人能给我一个答案,那就太棒了,因为我在互联网上找不到东西。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    Firestore 不支持更新查询,您将查询发送到服务器,它会更新(或在您的情况下删除)所有匹配的文档。要编写或删除文档,您需要知道其在应用程序代码中的完整路径。

    这意味着您需要执行两个步骤来删除文档:

    1. 执行查询以查找所有符合您条件的文档。
    2. 遍历结果并将其删除。

    在代码中类似于:

    refUser.where("city", isEqualTo: "CA").getDocuments().then((querySnapshot){
      for (DocumentSnapshot documentSnapshot in querySnapshot.documents){
        documentSnapshot.reference.delete();
      });
      snapshot.documents.first.reference.delete();
    });
    

    另见:

    【讨论】:

    • 非常感谢。我明白了,这可能是我在互联网上找不到东西的原因哈哈。我会试试看。 :)
    • 我包含了一些通过在 Stack Overflow 上搜索“更新多个文档”找到的链接。
    • 再次感谢,我发现我的搜索请求有误...
    • 对不起,我想我写的有点乱。我的意思是,我在互联网上搜索了错误的东西,所以我无法自己找到解决方案。感谢您的时间和帮助! :)
    【解决方案2】:

    您的代码将如下所示:

    QuerySnapshot querySnapshot = await db
      .collection("yourPathCollection")
      .where("Value Name", isEqualTo: "byCar")
      .get()
      .then((querySnapshot) {
    querySnapshot.docs.forEach((doc) {
      doc.reference.delete();
    });
    return null; });
    

    也许 Cloud Firestore 会阻止您的请求,因此您需要根据需要更改数据库规则。

    【讨论】:

    • 非常感谢,我想我已经在寻找类似你的代码的东西了。我会尝试一下,如果它有效,我会稍后再写。 :)
    • 我已经在一个类似的例子中测试过这个代码并且它有效,如果它适合你,请将此答案标记为有用:)
    • 我标记了您的答案,感谢您的帮助! :)
    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多