如何从Cloud Firestore删除具有所有子集合和文档的集合

时间:2020-09-22 04:58:09

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我在Cloud Firestore中有一个集合,它有数百万个文档和子集合。我想删除此集合及其所有文档和子集合。我们可以从Firebase控制台执行此操作,但是要删除此集合需要花费很多时间。

使用我可以删除此集合的任何firebase cli命令或node.js代码段吗?

2 个答案:

答案 0 :(得分:1)

您可以通过删除集合的所有文档来删除它。您可以在official docs中阅读更多内容。此处的示例代码:

async function deleteCollection(db, collectionPath, batchSize) {
  const collectionRef = db.collection(collectionPath);
  const query = collectionRef.orderBy('__name__').limit(batchSize);

  return new Promise((resolve, reject) => {
    deleteQueryBatch(db, query, resolve).catch(reject);
  });
}

async function deleteQueryBatch(db, query, resolve) {
  const snapshot = await query.get();

  const batchSize = snapshot.size;
  if (batchSize === 0) {
    // When there are no documents left, we are done
    resolve();
    return;
  }

  // Delete documents in a batch
  const batch = db.batch();
  snapshot.docs.forEach((doc) => {
    batch.delete(doc.ref);
  });
  await batch.commit();

  // Recurse on the next process tick, to avoid
  // exploding the stack.
  process.nextTick(() => {
    deleteQueryBatch(db, query, resolve);
  });
}

如果上述答案不起作用,则可以像here一样使用Cloud Functions

答案 1 :(得分:1)

Firebase CLI具有firestore:delete命令,该命令也可以递归删除内容。请参阅其文档here

请注意,API和CLI都不可能比控制台快得多。由于没有用于批量删除数据的API,因此它们基本上都采用相同的方法。