You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在删除Firestore用户时同步删除其他集合的对应用户文档

问题原因

你代码里的问题主要出在2处:

  • 你用inspection.empty判断Inspection文档是否存在,这个属性是**集合查询结果(QuerySnapshot)**的属性,单个文档查询返回的DocumentSnapshot没有这个属性,判断单个文档是否存在要调用.exists属性,你原来的判断条件永远为假,所以删除Inspection文档的逻辑从未触发。
  • delete()是异步方法,你没有加await关键字,程序不会等待删除操作执行完成就直接返回响应,会导致删除逻辑未执行完成就提前结束。

另外补充:Firestore默认删除父文档不会自动删除其下的子集合,如果你需要同步删除assignedToMe子集合内的所有内容,需要额外添加递归删除子集合的逻辑。

修复后代码

router.use("/delete", [auth, admin], async function (req, res, next) {
  try {
    const { email } = req.body;
    const userRef = db.collection("Users").doc(email);
    const insRef = db.collection("Inspection").doc(email);

    const user = await userRef.get();
    const inspection = await insRef.get();

    if (!user.exists) {
      return res.status(404).send("This user has already been deleted!");
    } 
    // 等待用户删除完成
    await userRef.delete();
    // 用exists判断Inspection文档是否存在
    if (inspection.exists) {
      // 等待Inspection文档删除完成
      await insRef.delete();
      // 如果需要同步删除assignedToMe子集合,取消注释下面的逻辑
      // const assignedCol = insRef.collection('assignedToMe');
      // const assignedDocs = await assignedCol.get();
      // const batch = db.batch();
      // assignedDocs.forEach(doc => batch.delete(doc.ref));
      // await batch.commit();
    }
    res.status(200).send("User deleted successfully.");
  } catch (err) {
    // 捕获错误避免服务无响应
    console.error('删除失败:', err);
    res.status(500).send("Delete failed, please try again later.");
  }
}); 

Firestore结构参考

Firestore结构示例1
Firestore结构示例2

内容的提问来源于stack exchange,提问作者Saadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:54:04