我想更新名为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
函数吗?或者由于批处理写入是原子完成的,因此触发器将仅被称为一次?我希望触发器仅被调用一次。
答案 0 :(得分:3)
就像@DougStevenson在他的评论中提到的那样,您只需要运行代码并查看行为即可。但是请注意,即使您使用相同的recipeRef
,也要在批处理中创建两个不同的更新。在这种情况下,您将得到的结果是onUpdate()
将触发两次。
如果只想被调用一次,那么您应该不创建两个不同的更新,您可以创建一个更新。 update()函数允许您传递多个可以更新的属性。如果您使用的是对象,则不仅仅是获取对文档的引用,获取文档,进行更改并将其写回。