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

时间:2019-07-08 13:45:47

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

我有一个名为 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 个答案:

答案 0 :(得分:1)

我认为您的想法正确。您必须比较快照前后的快照,以确保在实际要修改时间戳的位置发生了更新。无法知道更改是如何发生的(可能是客户端还是服务器),因此您必须查看数据本身。

答案 1 :(得分:1)

我发现的最简单的方法是完全避免对Cloud Functions的需求,并让客户端在每次写入时使用server-side timestamp包含lastUpdated值。

您可以通过以下方法在安全规则中强制执行此操作:

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