功能:
我有一个功能batchItemUpdate,它获取项目列表。每个项目都有一个名为batchs的数组。我正在更新项目列表中每个项目的批次。由于可能有很多项目我正在使用批量写入方式,因此。检查以下代码:
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();
}
问题: 事务已成功提交,但仅写入了最新的批次数组。 item中批次数组中的所有其他批次都将被删除。
if previously item.batches was [1,2,3,4]
to be updated with [1,2,3,5]
now item.batches is [5]
答案 0 :(得分:0)
当您使用值更新文档中的字段时,它将完全覆盖该字段的先前内容。不管它是什么类型,它都是一个“更新”这一事实不会将新值合并到该字段中(看起来像是将其设置为数组)。
如果要无条件地将值添加到数组,则可以:
您可能不得不放弃使用批处理的想法,除非您真的需要所有写入操作才能同时生效。那是批处理的主要用例。