【问题标题】:Set a collection as a sub-collection将集合设置为子集合
【发布时间】:2018-09-22 15:11:20
【问题描述】:

我想知道是否有更直接的方法可以将集合设置为新文档中的子集合。我目前的方法是:

  1. 获取CollectionA,将作为子集合使用
  2. 为新的DocA 创建一个引用
  3. 设置一些数据到DocA
  4. DocA 中为新的CollectionB 创建一个引用
  5. 使用batch() 并循环访问CollectionA,在CollectionA 的每个文档上使用batch(set, CollectionA.doc.data())
  6. 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


【解决方案1】:

没有将文档从一个集合复制到另一个集合的 API。您必须将文档读取给客户端,然后将它们写入目标集合。

我认为没有比批量复制它们更快的方法了。请注意,一个批处理最多可以包含 500 个写入操作,因此您可能需要执行多个。

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2016-10-13
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多