firebase 云函数-防止某些字段触发

insrf1ej  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个应用程序,人们可以要求食物,然后我有订单,每个订单都有该订单的状态,所以我做了一个功能,每次该订单的状态发生变化时都会发送用户通知,状态可以由接受订单的商店和订单完成时的用户更改。
但是我希望将此函数的执行限制为仅2个字段,userId和status字段,因为现在我有了onUpdated,无论何时更新此文档,此触发器都会启动。
我计划更新此文档的uid和status以外的其他字段,并且不希望触发器再次重新启动,并在不需要时向用户发送通知。
是否可以通过文档中的某些字段来限制触发器?

exports.onOrderUpdated = functions.firestore
.document('orders/{orderId}').onUpdate((change, context) => {

    var db = admin.firestore();

    try{
        const orderDataSnap = change.after.data();
        var userId = orderDataSnap.uid;
        var orderStatus = orderDataSnap.status;
    }catch(error){
        return handleErrorToUser(error);
    }

这里我只想在文档中的userId和状态发生变化时执行这个函数
有办法做到这一点吗?
谢谢

xzlaal3s

xzlaal3s1#

根据Change的文档,有beforeaftersnapshots
你可以在每个副本上调用data()方法,检查userIdstatus在before和after副本中是否相等。如果相等,就提前返回函数。

sqyvllje

sqyvllje2#

不,只有当文档的某些特定字段发生更改时,才有可能触发云函数。正如samdy1在他的回答中所解释的那样,您可以在云函数中检测哪些字段发生了更改,但是需要触发云函数
一种解决方案是在进行更改的同时将文档写入另一个专用集合。
例如,如果您正在使用新的status更新文档,则将文档写入集合statusUpdates,其中包含父订单文档的ID和状态值,并基于此文档创建触发Cloud Function。
当然,这意味着创建一个文档,并且它有一个成本(除了CF触发之外)。这取决于你做数学,取决于更新的频率,来计算这种方法是否比免费触发订单文档的云函数的方法更便宜。

相关问题