【问题标题】:Issues during Batch Transaction update in FirestoreFirestore 中批量事务更新期间的问题
【发布时间】:2019-10-24 23:59:13
【问题描述】:

功能:

我有一个获取项目列表的函数 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();
}

问题: 事务已成功提交,但仅写入批次数组中的最新批次。 item 中的批次数组中的所有其他批次都将被删除。

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

【问题讨论】:

    标签: angular firebase google-cloud-firestore angular7


    【解决方案1】:

    当您使用值更新文档中的字段时,它将完全覆盖该字段的先前内容。它是“更新”这一事实不会将新值合并到字段中,无论其类型如何(看起来您正在将其设为数组)。

    如果您想无条件地向数组添加值,您可以:

    1. 读取文档,更改内存中字段的值,然后将其写回文档。
    2. 或者,使用FieldValue.arrayUnion() 添加值。这一次只适用于一个值,因此您必须重复使用它。

    您可能不得不放弃使用批处理的想法,除非您真的需要所有写入同时生效。这是批处理的主要用例。

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2013-10-18
      • 2021-01-17
      • 1970-01-01
      相关资源
      最近更新 更多