繁体   English   中英

如何在 FlutterFlow 中使用多个过滤器从子集合中删除文档?

[英]How to delete a doc from a subcollection using multiple filters in FlutterFlow?

我正在使用 FlutterFlow,我的 firestore 结构如下:

users
 contacts
 contact_history
 events

所有都是“用户”的子集合。 我的规则设置为只有用户才能查看/编辑/删除他们的数据。

给定一组字段值“eventUID”和“contactUID”,我正在尝试从“contact_history”子集合中删除特定文档,但查询似乎是空的,它永远不会删除文档。

我正在写信给控制台以检查值和参数是否正确传递但 myLen 和 iter 保持为零。 我究竟做错了什么? 我是否需要以某种方式引用“用户”集合?

Future actDelEventContactHist(
  String? myEventUID,
  String? myContactUID,
) async {
  int iter = 0;
  int myLen = 0;
  print('Begin: actDelEventContactHist -------');
  print('myEventUID: $myEventUID');
  print('myContactUID: $myContactUID');

  WriteBatch batch = FirebaseFirestore.instance.batch();

  FirebaseFirestore.instance
      .collection('contact_history')
      .where('contactUID', isEqualTo: myContactUID)
      .where('eventUID', isEqualTo: myEventUID)
      .get()
      .then((querySnapshot) {
    myLen = querySnapshot.docs.length;
    print('myLen: $myLen');
    querySnapshot.docs.forEach((document) {
      iter++;
      batch.delete(document.reference);
    });
    return batch.commit();
  });

  print('iter: $iter');
  print('Docs deleted');
  print('END: actDelEventContactHist  -------');

好的,我想通了。 我必须包括“用户”集合,因为它是父集合。 为此,我必须导入 firebase_auth package。下面的解决方案...

import 'package:firebase_auth/firebase_auth.dart';

Future actDelEventContactHist(
  String? myEventUID,
  String? myContactUID,
) async {
  // Add your function code here!

  int iter = 0;
  int myLen = 0;
  print('Begin: actDelEventContactHist -------');
  print('myEventUID: $myEventUID');
  print('myContactUID: $myContactUID');

  final myId = FirebaseAuth.instance.currentUser!.uid;

  WriteBatch batch = FirebaseFirestore.instance.batch();

  FirebaseFirestore.instance
      .collection('users')
      .doc(myId)
      .collection('contact_history')
      .where('contactUID', isEqualTo: myContactUID)
      .where('eventUID', isEqualTo: myEventUID)
      .get()
      .then((querySnapshot) {
    myLen = querySnapshot.docs.length;
    print('myLen: $myLen');
    querySnapshot.docs.forEach((document) {
      iter++;
      batch.delete(document.reference);
    });
    return batch.commit();
  });

  print('iter: $iter');
  print('Docs deleted');
  print('END: actDelEventContactHist  -------');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM