可以使用angular将firebase文档及其所有子集合复制到另一个文档

可以使用angular将firebase文档及其所有子集合复制到另一个文档,angular,firebase,google-cloud-firestore,Angular,Firebase,Google Cloud Firestore,大家好,, 正如我们从图片中看到的示例,我想复制集合中包含的所有文档(及其数据)(“planaprendizaje”) 例如,将文档1中的数据放在文档10中。选择是否需要planaprendizaje或其他子集合 我正在使用angular连接到firebase以尝试获取数据。这是我的解决方案,但使用可调用的云函数。您可以使用source和dest参数 const functions=require('firebase functions'); const admin=require('fireb

大家好,, 正如我们从图片中看到的示例,我想复制集合中包含的所有文档(及其数据)(“planaprendizaje”)

例如,将文档1中的数据放在文档10中。选择是否需要planaprendizaje或其他子集合


我正在使用angular连接到firebase以尝试获取数据。

这是我的解决方案,但使用可调用的云函数。您可以使用source和dest参数

const functions=require('firebase functions');
const admin=require('firebase admin');
const copyDoc=async(源、目标)=>{
const docRef=admin.firestore().doc(源);
const docData=等待docRef
.get()
。然后((doc)=>doc.exists&&doc.data())
.catch((错误)=>{
console.error('error reading document',`${source}`,error.message);
抛出新函数.https.HttpsError('未找到','未读取复制文档');
} );
if(docData){
等待管理员
.firestore()
.doc(dest)
.set(docData)
.catch((错误)=>{
console.error('error creating document',`${dest}`,error.message);
抛出新函数。https.HttpsError(
“数据丢失”,
“数据未正确复制到目标集合,请重试。”,
);
} );
}
const subcollections=await docRef.listCollections();
用于等待(const subcollectionRef of subcollections){
const subPath=`${source}/${subcollectionRef.id}`
日志('parsing:',子路径)
试一试{
const snapshot=await subcollectionRef.get()
const docs=snapshot.docs;
用于等待(文件的常量文件){
console.log(`coping:${subPath}/${doc.id}->${dest}/${subcollectionRef.id}/${doc.id}`)
等待copyDoc(`${subPath}/${doc.id}`、`${dest}/${subcollectionRef.id}/${doc.id}`);
}
}捕获(e){
抛出新函数。https.HttpsError(
“数据丢失”,
`${e.message}->${subPath},请重试。`,
)
}
}
}
exports.set=函数
.区域(“欧洲-西部3”)
.https.onCall(异步(数据、上下文)=>{
如果(!context.auth){
//正在抛出HttpsError,以便客户端获取错误详细信息。
抛出新函数.https.HttpsError('unauthenticated','必须在验证时调用函数');
}
试一试{
等待copyDoc('path\u to/origin\u doc'、'path\u to/destination\u doc')
返回{result:'path_to/destination_doc'}
}捕获(e){
抛出新函数.https.HttpsError('aborted',e.message);
}
} );

这当然是可能的,但是没有一个API调用可以做到这一点,因此您必须为它编写代码。