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

Firebase集合单文档内合并Google Sheets同步的新增数据实现方法

Firebase 单文档数据合并实现方案

核心问题原因

你当前代码存在两个核心问题导致每次生成新文档、数据无法合并:

  1. 调用collection.doc()时未传入固定文档ID,Firebase会默认生成随机ID的新文档,自然每次运行都会新增文档
  2. 现有的判断逻辑if(!this.collection.doc)无效:只要调用collection.doc()方法无论目标文档是否存在都会返回文档引用对象,该判断永远不成立;同时就算开启merge配置,直接传入新数组会直接覆盖原有数组的下标键,不会自动追加内容

修改后代码

你只需要替换excelData方法内的存储逻辑即可,核心思路是固定文档ID -> 读取已有数据 -> 新旧数组合并 -> 写入数据库:

excelData(){
  var sf = "https://docs.google.com/spreadsheets/d/1qeCEUlVt_hnuyhnoT1wxMMSv7kZW1s4cUIRLynJ0TxQ/gviz/tq?tqx=out:json";
  this.http.get(sf,{responseType: 'text'}).subscribe(res=>{
    const data = res.toString().match(/google\.visualization\.Query\.setResponse\(([\s\S\w]+)\)/);
    if(data && data.length==2){
      const obj=JSON.parse(data[1]);
      const table=obj.table;
      const header =  table.cols.map(({label}) => label);
      const rows = table.rows.map(({c}) => c.map(({v}) => v));
      const values = rows.map(e => header.reduce((o, f, j) => Object.assign(o, {[f]: e[j]}), {}));
      console.log(values);

      // ====== 以下是修改的存储逻辑 ======
      // 1. 定义固定ID的文档引用,保证整个集合只有这一个文档
      const fixedDoc = this.collection.doc('merged_excel_data');
      // 2. 先读取文档现有数据
      fixedDoc.get().subscribe(docSnapshot => {
        let finalData: any[] = [];
        // 3. 如果文档已有数据,先取出旧数据
        if(docSnapshot.exists){
          const oldData = docSnapshot.data() as any[];
          // 4. 合并旧数据和新拉取的数据
          finalData = [...oldData, ...values];
          // 【可选去重】如果需要按Id去重可以替换上面的合并逻辑为:
          // const allData = [...oldData, ...values];
          // const uniqueMap = new Map(allData.map(item => [item.Id, item]));
          // finalData = Array.from(uniqueMap.values());
        }else{
          // 文档不存在就直接用新数据
          finalData = values;
        }
        // 5. 写入合并后的完整数据
        fixedDoc.set(finalData);
      })
      // ====== 修改结束 ======
    }  
  });
}

注意事项

  • 固定文档IDmerged_excel_data你可以自定义修改,只要保持唯一即可
  • 如果你的Google Sheets可能返回重复数据,开启上面注释里的去重逻辑即可避免相同Id的条目重复存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:03