如何使用Firebase交易创建子集合?

发布时间:2020-07-07 14:33

创建用户时,我将运行Transactions(functions.auth.user()。onCreate())在一些集合中创建少量文档。但是现在,此外,我需要创建这样的路径:

/ collection1 / {uid} / subcol1 / {id} / subcol2 /

“ collections”,“ subcol1”,“ subcol2”内部应有一个文档。我怎样才能做到这一点?首先,我不知道如何将子集合添加到创建的集合文档({uid})中。我有这样的东西:

const ref = admin.firestore().doc(`collection1/${event.uid}`);

return admin.firestore().runTransaction(async (transaction) => {
  const snapshot = await transaction.get(ref);

  if (!ref.exists) {
    transaction.set(
      snapshot,
      {
        fields: {
          field1: 0,
          field2: 0,
        },
      },
      { merge: true }
    );
  }
});

我应该如何添加子集合以使其具有上述路径?

回答1

创建子集合不需要任何特殊代码。将第一个文档添加到集合和子集合后,它们会自动创建,而当删除最后一个文档时,集合和子集合将被删除。交易和普通写入都是相同的。

这意味着您实际上需要在事务中编写文档才能使子集合出现。您可以像现在transaction.set()那样进行操作。您要做的就是像ref一样建立对文档的引用,并提供数据。

const ref2 = admin.firestore()
    .collection("collection1").
    .doc(event.uid)
    .collection("your-subcollection")
    .doc("your-document);
transaction.set(ref2, { your: data });

如您所见,它实际上与您现在所做的没什么不同。