Firestore批量写入操作顺序保证

Rom*_*hin 5 firebase google-cloud-firestore

批量写入中的操作是否保证按照其调用顺序执行?根据文档尚不清楚。是否强制只能是 (#0) -> (#1) -> (#2) 而不是其他方式?

const batch = db.batch();

const nycRef = db.collection('cities').doc('NYC');
batch.set(nycRef, {name: 'New York City'}); // (#0)

const sfRef = db.collection('cities').doc('SF');
batch.update(sfRef, {population: 1000000}); // (#1)

const laRef = db.collection('cities').doc('LA');
batch.delete(laRef); // (#2)

return batch.commit().then(function () {
  // ...
});

Run Code Online (Sandbox Code Playgroud)

Dou*_*son 3

批量更改没有顺序。它们同时以原子方式发生,或者根本不发生。任何客户端都无法获取不完整批次的数据库视图。

适用于该批次文档的任何安全规则都会同时更改所有文档。安全规则不适用于按顺序排列的单个文档。如果您在安全规则中使用getAfter()来获取批次中更改的文档内容,则每次调用 getAfter() 都只会看到新数据。

永远不会出现批量更新的文档看起来不完整的中间状态。

如果您在可以批量更新的文档上有任何云函数触发器,则没有定义的执行顺序 - 它们可以同时执行,或者以某种明显的“随机”顺序执行。