繁体   English   中英

如何在firestore上的集合内的文档内的集合内按字段删除文档

[英]how to delete document by field inside collection inside document inside collection on firestore

当每个医生(由他的 email 代表)都有一个名为patients_waiting的集合时,我就有了 Doctor 集合。 现在,我要做的是从包含他的email的字段调用患者中从paitents_waiting集合中删除一个文档。

图 1

图 2

但我尝试了很多解决方案,但现在没有一个对我有用。 我试图做的事情:

Firestore.instance
       .collection("Doctors")
       .document(doctorEmail)
       .collection("paitents_waiting")
       .document(paitentEmail)
       .delete();

现在不好了,因为文档保存在 uid 中,而不是 email 但我尝试使用 where function 但没有成功。 我如何找到 email 的这个文件并删除他?

我会提到我是在 flutter 上做的,但我认为没关系。

只要您有患者的 email 地址,您就可以搜索并删除它

 Firestore.instance
            .collection("Doctors")
            . document(doctorEmail)
            .collection("paitents_waiting")
            .where('patient', isEqualTo:paitentEmail )
            .get().then((value) => value.docs.single.reference.delete())

注意:您使用的是旧版本的 firestore

在您的paitents_waiting集合中,文档不是根据患者 email 命名的,它们是随机生成的 Firebase ID。 细看。

Firestore.instance
       .collection("Doctors")
       .document(doctorEmail)
       .collection("paitents_waiting")
       .document(paitentEmail) //this in your Firebase isn't an email, it's "xaErf43Asd..etc"
       .delete();

如果您想遵循这种方法,否则应该可以工作,当您想创建患者等待文档时,请使用.set而不是.add ,并将文档 ID 设置为您的专利的 email,如下所示:

Firestore.instance
       .collection("Doctors")
       .document(doctorEmail)
       .collection("paitents_waiting")
       .document(paitentEmail)
       .set({your patient data here});

这应该让事情为你工作。

要通过email删除医生的所有患者,您可以结合使用 Firestore 查询和批量更新。 第一个我们需要获取所有具有相同 email 的患者,另一个删除它们。 一个 function 看起来像这样:

Future<void> deletePatiensForDoctor(String docEmail, String patEmail) async {
  WriteBatch batch = FirebaseFirestore.instance.batch();

  QuerySnapshot querySnapshot = await Firestore.instance
      .collection("Doctors")
      .document(docEmail)
      .collection("paitents_waiting")
      .where('email', isEqualTo: patEmail)
      .get();

  querySnapshot.docs.forEach((doc) {
    batch.delete(doc.reference);
  });

  return batch.commit();
}

暂无
暂无

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

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