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

Firestore中如何将文档字段内的完整Map复制到另一个文档?

问题解决:Firestore文档字段访问与数据复制

为什么doc.tmp_ff返回undefined?

Firestore查询返回的QueryDocumentSnapshot对象(即代码里的doc)本身并不直接包含文档字段,必须通过doc.data()方法获取文档的实际数据对象,之后才能访问tmp_ff字段。直接用doc.tmp_ff自然会得到undefined。

另外你代码里用了普通function作为map的回调,this的指向会发生变化,导致this.copy_tmp_ff无法正确访问到你声明的变量,建议改用箭头函数保持上下文。

修正后的代码实现

步骤1:正确获取tmp_ff并复制数据

// 外部声明存储数据的变量,根据tmp_ff类型选择对象或Map
const copy_tmp_ff = {}; 
// 若tmp_ff是Firestore Map类型,改用:const copy_tmp_ff = new Map();

const copyQuoteProduct = firebase.firestore().collection('ALL_quote').where("quote_hashid", "==", "9hgr9Myhc70CUalKnT1u"); 
const querySnapshot = await copyQuoteProduct.get();

querySnapshot.docs.forEach(doc => {
  const docData = doc.data();
  const tmp_ff = docData.tmp_ff;
  console.log("=== tmp_ff数据:", tmp_ff);

  // 若tmp_ff是普通对象,用Object.assign复制所有键值对
  Object.assign(copy_tmp_ff, tmp_ff);
  // 若tmp_ff是Firestore Map类型,改用遍历复制
  // tmp_ff.forEach((value, key) => {
  //   copy_tmp_ff.set(key, value);
  // });
});

步骤2:将复制的数据添加到ALL_invoice集合

const ref = firebase.firestore().collection("ALL_invoice");
await addDoc(ref, copy_tmp_ff);

注意事项

  • 避免await和.then()混用,统一用async/await写法更易维护
  • 先打印docData确认查询到的文档确实包含tmp_ff字段
  • 根据tmp_ff的实际类型(普通对象/Firestore Map)选择对应的复制方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:33:24