Firestore交易:将第一个文档的ID设置为第二个文档

时间:2020-04-15 10:35:34

标签: javascript google-cloud-firestore transactions

我正在尝试将两个文档添加到两个不同的集合中。

说coll1和coll2。

我向coll1添加一个文档=>我得到了我想将其设置为coll2文档的文档id,我可以简单地编写两个add,但是我试图在事务中完成这些操作,因此如果一个失败都失败了。

我无法使用this link

完成该操作

下面是我拥有的代码,需要将其转换为翻译/批处理:

await db.runTransaction(
      async function (transaction) {
        const coll1 = {
          text: 'This is collection 1 text',
        }

        const coll1Doc = await db
          .collection('coll1')
          .add(coll1)
        // I tried transaction.set(db.collection('coll1').doc(), coll1) but this doesn't return the doc or the docId which we need in the next step.
        // Similay batch.set is also not returning the newly added/edited doc or its Id.

        if (coll1Doc && coll1Doc.id) {
          const coll1Id = coll1Doc.id
          const coll2 = {
            text: 'This is collection 2 text',
          }
          await db
            .collection('coll2')
            .doc(coll1Id)
            .set(coll2)
        }
      }
    )

1 个答案:

答案 0 :(得分:1)

Firestore文档ID在您的应用程序代码中生成,并且在统计上保证是唯一的。因此,您的add()呼叫实际上采取了以下两个步骤:

  1. 生成新的唯一ID
  2. 为此ID创建一个DocumentReference
  3. 在该DocumentReference中设置数据

有了这些知识,您就可以根据获得的ID自己构建DocumentReference,而无需使用交易对象。

const coll1Doc = db
  .collection('coll1')
  .doc();
const id1 = coll1Doc.id;
await coll1Doc.set(coll1);

现在您可以在第二次写操作中使用id1