批处理更新将触发多少次onUpdate函数?

时间:2019-10-21 07:50:59

标签: android google-cloud-firestore google-cloud-functions

我想更新名为recipes的集合中文档中的两个字段,并且我使用批处理更新来做到这一点:

let recipeRef = db.collection('recipes').doc(`${recipeId}`);
let batch = db.batch();
batch.update(recipeRef, {ratingsCount : admin.firestore.FieldValue.increment(1)});
batch.update(recipeRef, {totalRating : admin.firestore.FieldValue.increment(snap.data().rating)})
return batch.commit();

我在recipes集合上有一个触发函数,如下所示:

exports.RecipeUpdated = functions.firestore
.document('recipes/{recipeId}')
.onUpdate((change, context) => 
{
    //code
});

我的问题是上述批处理中有两次更新,这还会触发两次onUpdate函数吗?或者由于批处理写入是原子完成的,因此触发器将仅被称为一次?我希望触发器仅被调用一次。

1 个答案:

答案 0 :(得分:3)

就像@DougStevenson在他的评论中提到的那样,您只需要运行代码并查看行为即可。但是请注意,即使您使用相同的recipeRef,也要在批处理中创建两个不同的更新。在这种情况下,您将得到的结果是onUpdate()将触发两次。

如果只想被调用一次,那么您应该创建两个不同的更新,您可以创建一个更新。 update()函数允许您传递多个可以更新的属性。如果您使用的是对象,则不仅仅是获取对文档的引用,获取文档,进行更改并将其写回。