Облачные функции Firebase - перемещать данные в Firestore - PullRequest
0 голосов
/ 02 июня 2018

Обладает базовыми знаниями о языке Typescript, но хотел бы знать, как я могу скопировать несколько документов из одной коллекции баз данных Firestore в другую коллекцию?

Я знаю, как отправить запрос из приложениякод вместе с соответствующими данными (строка и идентификатор пользователя авторизации firebase), но не уверен насчет кода Typescript для обработки запроса ...

1 Ответ

0 голосов
/ 02 июня 2018

Это очень широкий вопрос, но что-то вроде этого может перемещать данные в умеренных размерах из одной коллекции в другую:

import * as _ from 'lodash';   
import {firestore} from 'firebase-admin';

export async function moveFromCollection(collectionPath1: string, collectionPath2: string): void {
    try {
        const collectionSnapshot1Ref = firestore.collection(collectionPath1);
        const collectionSnapshot2Ref = firestore.collection(collectionPath2);

        const collectionSnapshot1Snapshot = await collectionSnapshot1Ref.get();
        // Here we get all the snapshots from collection 1. This is ok, if you only need
        // to move moderate amounts of data (since all data will be stored in memory)
        // Now lets use lodash chunk, to insert data in batches of 500
        const chunkedArray = _.chunk(collectionSnapshot1Snapshot.docs, 500);
        // chunkedArray is now an array of arrays, with max 500 in each
        for (const chunk of chunkedArray) {
            const batch  = firestore.batch();
            // Use the batch to insert many firestore docs
            chunk.forEach(doc => {
                // Now you might need some business logic to handle the new address,
                // but maybe something like this is enough
                const newDocRef = collectionSnapshot2Ref.doc(doc.id);
                batch.set(newDocRef, doc.data(), {merge: false});
            });
            await batch.commit();
            // Commit the batch
        }
        console.log('Done!');
    } catch (error) {
        console.log(`something went wrong: ${error.message}`);
    }
}

Но, может быть, вы можете рассказать больше о сценарии использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...