如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档

Posted

技术标签:

【中文标题】如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档【英文标题】:How to delete multiple documents with specific Value in Firestore with Flutter 【发布时间】:2020-11-20 01:20:02 【问题描述】:

我正在尝试从我的集合中删除一个字段中具有特定字符串值的多个文档。 但我认为我做错了什么。

onPressed: () async 
  Firestore.instance.collection('collection').getDocuments().then((snapshot) 
  for (DocumentSnapshot ds in snapshot.documents.where(('field') == 'specificValue')
    ds.reference.delete();
    );
  );

我目前正在尝试在获取所有文档后使用循环删除每个项目,但我无法删除特定项目。因为我在“where”部分下遇到错误。

【问题讨论】:

【参考方案1】:

要使用where,您需要获取该collection 中所有文档的列表,然后获取where 以过滤List 并删除filteredList

  onPressed: () async 
    onPressed() async 
    Firestore.instance.collection('collection').getDocuments().then((snapshot) 
      List<DocumentSnapshot> allDocs = snapshot.documents;
      List<DocumentSnapshot> filteredDocs =  allDocs.where(
              (document) => document.data['field'] == 'specificValue'
      ).toList();
      for (DocumentSnapshot ds in filteredDocs)
        ds.reference.updateData(
          'field': 'newValue'
        );
      
    );
  

【讨论】:

嘿,你的功能很好用。但我注意到最好将每个文档的“归档”值设置为空,而不是删除它们。是否可以使用 updateData() 函数而不是 delete() 函数来做到这一点?如果是,我怎么能只更新这个字段值。 哦,'归档'是一种类型。它的意思是“字段”

以上是关于如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flutter 在 Firestore 中删除集合中的所有文档

如何在 Flutter Web 上使用 StreamBuilder 和 Firestore?

如何在 Firebase + Firestore + Flutter 中使用 StreamBuilder 将所有子集合数据获取到 Widget

如何在flutter的firestore中使用uid更新用户数据

如何在flutter中获取firestore文档的documentid?

如何使用flutter cloud_firestore包传递firestore auth token