Firestore交易可以批量吗?

时间:2019-03-19 18:27:49

标签: javascript google-cloud-firestore

我在firestore集合查询上执行了一系列更新,每个更新都需要访问当前值。我知道交易是执行这些更新的原子方式,但是可以批量进行这一系列更新吗?

当前,我这样更新收藏集:

let query;
query = db.collection('focuses');
query = query.where('userId', '==', auth.currentUser.uid);
query = query.where('active', '==', true);

query.get().then(snapshot => {
  const batch = db.batch();

  snapshot.forEach(doc => {
    batch.update(
      db.collection('focuses').doc(doc.id),
      { 
        active: false, 
        working: true,
        time: doc.data().workPeriod * 60,
      }
    );
  });

  batch.commit().then(() => {
    auth.signOut().catch(error => {
      console.error(error);
    });
  }).catch(error => {
    console.error(error);
  });
});

这可行,但是workPeriod字段正在事务外部访问,所以我的理解是它可能容易受到同时访问的影响。

那么是否可以为每个批次更新进行交易?如果不是,那么最好的方法是从一系列事务中收集每个Promise,然后使用Promise.all来建立一个回调,在完成一系列事务后将调用该回调? >

1 个答案:

答案 0 :(得分:0)

否,无法批量交易。您必须选择批处理或事务进行原子更新。事务与批处理类似,因为所有更新都适用,或者没有更新。批处理与事务之间的区别在于,批处理只是写,但事务先读后写。