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

在Firestore中存储用户疫苗接种信息子集合的方式是否正确?

你的实现逻辑基本正确,可以达到为users集合内的指定用户创建vaccination子集合存储疫苗接种信息的效果,但存在3处需要修正和优化的点:

  • 异步逻辑处理缺失:Firestore的set()方法属于异步操作,会返回Promise对象,你当前的写法没有等待异步操作执行完成就打印了保存成功的日志,无法真实反馈数据是否成功写入;同时try/catch只能捕获同步代码的异常,异步操作抛出的报错无法被当前的catch块捕捉,会导致报错丢失。
  • merge配置冗余:你调用doc()时没有传入指定的文档ID,Firestore会自动为每条接种记录生成随机唯一ID,此时写入的是全新文档,{merge: true}的作用是更新已有文档时仅覆盖传入的字段、保留文档内其他未传字段,在纯新增场景下该配置没有实际作用,若你的业务仅做新增可以直接移除,若后续要兼容更新已有接种记录的逻辑可以保留。
  • 缺少uid有效性校验:建议在执行写入逻辑前先判断uid是否为有效值,避免uid未完成初始化时,在users集合下生成ID为undefined的无效文档。

优化后的代码参考:

const handleSubmit = async (e) => {
    e.preventDefault();
    // 先校验uid是否存在
    if (!uid) {
      console.error("用户ID不存在,无法保存数据");
      return;
    }
    try {
      const userVaccineRef = firestore
        .collection("users")
        .doc(uid)
        .collection("vaccination")
        .doc();
      // 等待写入操作完成
      await userVaccineRef.set({
        vaccineType,
        firstDoseDate,
        secDoseDate,
        firstVaccinator,
        secondVaccinator,
      });
      // 写入成功后再打印,还可以获取到生成的接种记录ID用于后续操作
      console.log("数据保存成功,接种记录ID:", userVaccineRef.id);
    } catch (err) {
      console.error("保存失败:", err);
    }
  };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:51:04