【问题标题】:Firebase Batched Write: One write needs another one performed previouslyFirebase 批量写入:一次写入需要之前执行的另一次写入
【发布时间】:2020-09-09 07:32:19
【问题描述】:

我想使用 Firebase 批量写入来确保我的所有写入都没有发生。

但是,我想创建一个文档 (doc1) 和一个文档 (doc2),并且 doc2 应该在 doc1 的子集合中。

我认为 doc1 需要存在,以便它可以有任何子集合(如果我错了,请纠正我)。我仍然可以在一次批量写入中同时进行两次写入吗?

【问题讨论】:

    标签: firebase google-cloud-firestore atomic write


    【解决方案1】:

    reference 表示批处理中的写入在本地不可见(即批处理中的其他写入不可见)。在您的示例中,当您编写 /collection/doc1/subcollection/doc2 时,doc1 尚不存在...

    但是,事实证明,如果 doc1 不存在,您可以写入 /collection/doc1/subcollection/doc2 事件,它将在您的控制台中为 shown in italics

    所以最后:是的,您可以在一个批次中完成两个写入操作。 Doc2 将在一个不存在的 doc1 中,但只是在提交期间临时,一旦提交完成,所有会好的。

    【讨论】:

      【解决方案2】:

      是的,只要知道这两个文档的引用,就可以很好的将两个文档都写在一个批处理中,如下(JavaScript SDK):

          const db = firebase.firestore();
      
          // Get a new write batch
          let batch = db.batch();
      
          // Set the value of 'Doc1'
          const doc1Ref = db.collection("col").doc("1");
          batch.set(doc1Ref, { foo: "bar" });
      
          // Set the value of 'Doc2'
          const doc2Ref = db.collection("col").doc("1").collection("subcol").doc("2");
          batch.set(doc2Ref, { bar: "foo" });
      
          // Commit the batch
          batch.commit().then(function () {
              // ...
          });
      

      实际上,从技术角度来看,这两个文档是完全独立的。他们只是分享他们的路径的一部分,但没有别的。这样做的一个副作用是,如果您删除一个文档,它的子集合仍然存在。

      【讨论】:

        猜你喜欢
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多