Экспорт всех коллекций и вложенных коллекций из Firestore

#firebase #google-cloud-firestore

#firebase #google-облако-firestore

Вопрос:

Я опробовал экспорт данных из Firebase для «резервного копирования» моей базы данных, но, к моему большому удивлению, он не экспортировал вложенные коллекции, несмотря на то, что у них были уникальные имена. Есть ли способ экспортировать всю базу данных?

Я знаю, что есть пакеты NPM, которые могут это делать, но они не экспортируются в двоичный формат, в который экспортируется GCP, что более экономит пространство.

Редактировать:

Я попытался экспортировать данные с помощью функции запланированного облака и консоли GCP. Я точно следовал инструкциям и ничего не менял.

Они оба загрузили папку с содержимым на изображениях ниже.

Корневой каталог: введите описание изображения здесь

all_namespaces/all_kinds

введите описание изображения здесь

Я импортировал 2020-11-05T14:40:04_75653.overall_export_metadata через консоль GCP и, конечно же, все коллекции и документы верхнего уровня вернулись, но всех вложенных коллекций там не было. Я ожидал, что все коллекции и вложенные коллекции будут восстановлены из импорта.

Итак, в итоге я попытался экспортировать данные двумя способами и загрузить через один.

Вот функция запланированного облака:

 const functions = require('firebase-functions');
const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();

// Replace BUCKET_NAME
const bucket = 'gs://BUCKET_NAME';

exports.scheduledFirestoreExport = functions.pubsub
                                            .schedule('every 24 hours')
                                            .onRun((context) => {

  const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT;
  const databaseName = 
    client.databasePath(projectId, '(default)');

  return client.exportDocuments({
    name: databaseName,
    outputUriPrefix: bucket,
    // Leave collectionIds empty to export all collections
    // or set to a list of collection IDs to export,
    // collectionIds: ['users', 'posts']
    collectionIds: []
    })
  .then(responses => {
    const response = responses[0];
    console.log(`Operation Name: ${response['name']}`);
  })
  .catch(err => {
    console.error(err);
    throw new Error('Export operation failed');
  });
});
  

Итак, с помощью приведенного выше кода я ожидаю, что он экспортирует все в firestore. Например, если бы у меня была вложенная коллекция:

 orders/{order}/items
  

Я ожидаю, что при импорте данных через консоль GCP я получу обратно вложенную коллекцию, указанную выше. Однако я возвращаю только верхний уровень. т.е.

 orders/{order}
  

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

1. Существует три способа экспорта базы данных Firestore. Какие из них вы пробовали? Вы пробовали все три? Вы спрашиваете об одном конкретном методе, и если да, то что именно вы пробовали и что не сработало так, как вы ожидали? Пожалуйста, отредактируйте вопрос, чтобы было понятно.

2. @DougStevenson спасибо за ваш комментарий, обновил вопрос. Скажите мне, поможет ли это прояснить ситуацию!

3. Ваша ссылка на «запланированную облачную функцию» не ведет ни к чему, в котором используются эти слова. Если вы писали код в облачной функции, пожалуйста, поделитесь кодом здесь и объясните, что работает не так, как вы ожидаете.

4. @DougStevenson Извиняюсь, я обновил ссылку и добавил код

5. Чтобы разобраться в этом, не могли бы вы предоставить скриншот вашей структуры данных? Я не знаком с теми, которые вы предоставили ранее.