0

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

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

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

4

2 回答 2

2

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

但是,事实证明,如果 doc1 不存在,您可以写入 /collection/doc1/subcollection/doc2 事件,它将在您的控制台中以斜体显示。

所以最后:是的,你可以在一个批次中完成你的写作。Doc2 将在一个不存在的 doc1 中,但只是在提交期间暂时,一旦提交完成,一切都会好起来的。

于 2020-09-09T08:42:41.567 回答
1

是的,只要你知道这两个文档的引用,你就可以很好地把两个文件都写在一个批处理中,如下(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 () {
        // ...
    });

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

于 2020-09-09T08:39:38.637 回答