#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. Чтобы разобраться в этом, не могли бы вы предоставить скриншот вашей структуры данных? Я не знаком с теми, которые вы предоставили ранее.