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
相关产品推荐
相关产品推荐

