Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将一个集合作为子集合复制到另一个集合中?角火/角火/火库_Javascript_Angular_Google Cloud Firestore_Rxjs_Angularfire - Fatal编程技术网

Javascript 如何将一个集合作为子集合复制到另一个集合中?角火/角火/火库

Javascript 如何将一个集合作为子集合复制到另一个集合中?角火/角火/火库,javascript,angular,google-cloud-firestore,rxjs,angularfire,Javascript,Angular,Google Cloud Firestore,Rxjs,Angularfire,我有两套 集合1-模块 集合2-配置文件>>模块(作为配置文件集合中的子集合) 我想将所有文档从集合1复制到集合2(一次性操作) 下面是我试过的 private afs:AngularFirestore; this.afs.collection('modules').valueChanges().subscribe(vals =>{ vals.forEach(moduleFromRepo =>{ this.afs.collection('prof

我有两套

集合1-模块

集合2-配置文件>>模块(作为配置文件集合中的子集合)

我想将所有文档从集合1复制到集合2(一次性操作)

下面是我试过的

private afs:AngularFirestore;

this.afs.collection('modules').valueChanges().subscribe(vals =>{
        vals.forEach(moduleFromRepo =>{
          this.afs.collection('profiles').doc('userid1').collection('modules').add(moduleFromRepo);    
        })
      });
此代码存在问题-虽然这是第一次工作,但每次将新文档添加到集合1时,整个集合1都会被重新复制到集合2,这样我将在集合2中获得多个重复的文档副本


还有,首先我的方法正确吗?编写代码的正确方法是什么?

我还发现了一个解决方法,使用take(1),这是一个rxjs操作符

您是想一次复制所有内容,还是想复制文档随时间发生的更改?请编辑问题以明确您的目标。您的代码使用的是实时侦听器,每次更改都会传递整个文档集。我更希望使用
onUpdate
事件创建函数触发器,如下所述:。主要思想是检查collection1中即将出现的数据,如
functions.firestore.document('modules/{moduleId}')
,然后使用用户Id(如果更新的模块文档具有此数据)按Id获取collection2文档并保存到其子集合中,那么为什么不编写一个触发器函数,正如您在该文档中看到的,它不是在客户端应用程序中执行此操作,而是一次性操作(在问题中也进行了编辑)。因此,我认为我不需要创建触发器。我还找到了一个解决方法,使用take(1)(rxjs操作符)-我实现了我想要的。请随意回答您自己的问题并接受它为正确的,这样其他人也可以有一个清晰的解决方案。