Как удалить коллекцию со всеми ее вложенными коллекциями и документами из Cloud Firestore

#javascript #node.js #firebase #google-cloud-firestore #google-cloud-functions

#javascript #node.js #firebase #google-cloud-firestore #google-cloud-функции

Вопрос:

У меня есть коллекция в Cloud Firestore, и в ней миллионы документов и вложенных коллекций. Я хочу удалить эту коллекцию со всеми ее документами и вложенной коллекцией. Мы можем сделать это из консоли Firebase, но на удаление этой коллекции уйдет много времени.

Есть ли какая-либо команда командной строки firebase или node.js фрагмент кода, используя который я могу удалить эту коллекцию?

Ответ №1:

Вы можете удалить коллекцию, удалив все ее документы. Вы можете прочитать больше в официальных документах. Пример кода здесь:

 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);
  });
}
  

В случае, если приведенный выше ответ не работает, вы можете использовать облачные функции, как здесь

Комментарии:

1. Где я должен запустить этот приведенный выше код? Должен ли я поместить это в файл javascript и запустить его? Можете ли вы дать мне небольшое представление об этом?

2. вы можете запустить это в node.js сервер. Если вы не хотите этого делать, то лучше всего использовать подход CLI, как в приведенной выше ссылке

Ответ №2:

В командной строке командной строки Firebase есть firestore:delete команда, которая также рекурсивно удаляет содержимое. Смотрите Его документацию здесь.

Обратите внимание, что ни API, ни CLI, скорее всего, не будут значительно быстрее консоли. Поскольку нет API для массового удаления данных, все они, по сути, используют один и тот же подход.