【发布时间】:2018-09-22 15:11:20
【问题描述】:
我想知道是否有更直接的方法可以将集合设置为新文档中的子集合。我目前的方法是:
- 获取
CollectionA,将作为子集合使用 - 为新的
DocA创建一个引用 - 设置一些数据到
DocA - 在
DocA中为新的CollectionB创建一个引用 - 使用
batch()并循环访问CollectionA,在CollectionA的每个文档上使用batch(set, CollectionA.doc.data()) -
batch.commit()将所有文档从CollectionA提交到CollectionB
有没有更简单的方法来做到这一点?
喜欢:
DocA.collection('CollectionB').set(CollectionA)
我尝试了一些与此类似的方法,但 CollectionA 最终生活在 CollectionB 内的单个文档中。而不是CollectionA 中的所有文档成为CollectionB 中的文档。
【问题讨论】:
-
您是否在问是否可以一次创建新文档和子集合?答案是“不”。如果您询问是否可以在不创建其所在文档的情况下创建子集合,答案是“是”:
db.collection('CollectionB/document1/CollectionA').add(...)。 -
我不确定我是否理解这些步骤。您是否尝试在其子集合中复制集合的所有文档?如果是这样:为什么?我完全赞成数据重复,但乍一看这听起来有点过分。
-
基本上我想要
CollectionA的快照(如当前状态,而不是Firestore 快照),设置为DocA中的子集合。换句话说,我想在创建DocA时将CollectionAs 状态保存为DocA的子集合。 -
啊,有道理。我认为没有比批量复制它们更快的方法了。请注意,一个批处理最多可以包含 500 个写入操作,因此您可能需要执行多个。
-
CollectionA包含约 12 个文档,但这些文档是嵌套的对象/数组。对于查询/更新,我认为它作为与包含数组的嵌套对象相反的子集合更有用。所以batch在这种情况下并没有太大的麻烦,但想确保没有更简单的方法。
标签: firebase google-cloud-firestore