【问题标题】:How do I copy a collection into another, as a sub collection? Angularfire/ Angular/ Firestore如何将一个集合作为子集合复制到另一个集合中?角火/角/火库
【发布时间】:2020-10-18 11:05:42
【问题描述】:

我有两个收藏

集合 1- 模块,

collection 2-profile >> modules(作为profile集合中的子集合)

我想将集合 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 中。

另外,我的方法首先是正确的吗?实现这一目标的正确编码方法是什么?

【问题讨论】:

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

标签: javascript angular google-cloud-firestore rxjs angularfire


【解决方案1】:

我还发现了一个使用 take(1) 的解决方法,它是一个 rxjs 运算符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2016-02-28
    • 2010-09-13
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多