Проблемы при обновлении пакетной транзакции в Firestore - PullRequest
0 голосов
/ 10 июня 2019

Функциональность:

У меня есть функция batchItemUpdate, которая получает список элементов. У каждого элемента есть массив, называемый партиями. Я обновляю партии каждого элемента в списке элементов. Так как может быть много элементов, для которых я использую пакетную запись, это так. Проверьте код ниже:

batchItemUpdate(items: Item[]) {

    var transactionBatch = this.afs.firestore.batch();

    items.forEach((item)=>{
        const sfDocRef = this.afs.firestore.collection('items').doc(item.id);
        transactionBatch.update(sfDocRef,
            {
                batches:item.batches
            });
    });
    return transactionBatch.commit();
}

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

if previously item.batches was [1,2,3,4]
to be updated with [1,2,3,5]
now item.batches is [5]

1 Ответ

0 голосов
/ 10 июня 2019

Когда вы обновляете поле в документе значением, оно полностью перезаписывает предыдущее содержимое этого поля.Тот факт, что это «обновление», не объединяет новые значения в поле, независимо от его типа (похоже, вы делаете его массивом).

Если вы хотите безоговорочно добавить значения в массив,Вы можете:

  1. Прочитать документ, изменить значение поля в памяти, а затем записать его обратно в документ.
  2. Или использовать FieldValue.arrayUnion () чтобы добавить значения.Это работает только для одного значения за раз, поэтому вам придется использовать его повторно.

Возможно, вам придется отказаться от идеи использования пакета, если вам действительно не нужна вся запись для вступления в силув то же время.Это основной вариант использования партии.

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