Пакет 500 записывает в пожарный магазин l oop из json файла - PullRequest
0 голосов
/ 09 марта 2020

Используя вдохновение, я получил из этой темы { ссылка } и ответил, что попытался заставить работать мой l oop, который должен записывать в fire store в пакетном режиме. Но каким-то образом я могу обновить только 1 документ, даже если вижу, что я перебираю различные значения из моего массива. Я загружаю данные в массив и работаю оттуда.

const db = admin.firestore();
const jsonStream = StreamArray.withParser();

let arr = []
jsonStream.on('data', ({ key, value }) => {
    arr.push(value);
});

jsonStream.on('end', () => {

    var counter = 0;
    var commitCounter = 0;
    var batches = [];

    arr.forEach((a, ind) => {
        batches[commitCounter] = db.batch();
        if (counter <= 498) {
            var thisRef = db.collection('Testing').doc(a.id);
            console.log("id")
            console.log(a.id);
            batches[commitCounter].set(thisRef, { ...a });
            counter = counter + 1;
        } else {
            counter = 0;
            commitCounter = commitCounter + 1;
            batches[commitCounter] = db.batch();
        }
    })
    for (var i = 0; i < batches.length; i++) {
        if(i==0)
        {
            console.log(batches[0])
        }
        batches[i].commit().then(function () {
            console.count('wrote batch');
        });
    }
});

const filename = path.join(__dirname, 'mydata.json');
fs.createReadStream(filename).pipe(jsonStream.input);

1 Ответ

1 голос
/ 09 марта 2020

Следующая строка выполняется на каждой итерации, что по существу «сбрасывает» ваш пакет в каждом раунде:

batches[commitCounter] = db.batch();

Таким образом, в конце каждая из ваших партий будет содержать только одну запись документа.

...