firebase 在firestore中更新文档的createdAt和updatedAt日期字段的正确方法是什么?

h7wcgrx3  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(94)

我有一个名为schools的文档集合,我们为它保留了名为createdAtupdatedAt的字段。我正在分别使用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;
}

有没有更好的方法来处理这种情况,以避免这些额外的触发?

hgncfbus

hgncfbus1#

我发现的最简单的方法是完全避免使用云函数,让客户机在每次写入时包含lastUpdated值以及服务器端时间戳。
您可以在安全规则中强制执行此操作,方法是选中:

allow update: if request.resource.data.lastUpdated == request.time
jv4diomz

jv4diomz2#

我认为你的想法是正确的。你必须比较之前和之后的快照,以确保更新发生在你真正想要修改时间戳的地方。没有办法知道“如何”发生变化(可能是客户端或服务器),所以你必须查看数据本身。

相关问题