我有一个名为schools的文档集合,我们为它保留了名为createdAt和updatedAt的字段。我正在分别使用onCreate和onUpdate触发器中的Firestore云触发器函数更新这些字段。
这里我面临的问题是,这些字段更新将不必要地再次调用onUpdate触发器。为了处理这些问题,我编写了一个名为skipOnUpdateTrigger的附加函数
const excludeFields = ["createdAt", "UpdatedAt"]
shouldSkipOnUpdateTrigger = function(docDataOld, docDataNew, excludeFields){
for(let i of excludeFields){
if (docDataOld[i] !== docDataNew[i])
return true;
}
return false;
}
有没有更好的方法来处理这种情况,以避免这些额外的触发?
2条答案
按热度按时间hgncfbus1#
我发现的最简单的方法是完全避免使用云函数,让客户机在每次写入时包含
lastUpdated
值以及服务器端时间戳。您可以在安全规则中强制执行此操作,方法是选中:
jv4diomz2#
我认为你的想法是正确的。你必须比较之前和之后的快照,以确保更新发生在你真正想要修改时间戳的地方。没有办法知道“如何”发生变化(可能是客户端或服务器),所以你必须查看数据本身。