如何跟踪Firestore中文档的最新更新时间?

时间:2018-11-30 13:21:41

标签: firebase triggers google-cloud-firestore

我想在我的updatedAt文档中有一个pizza字段,该字段在每次特定文档中发生更新时都应更新。我认为处理此问题的最佳方法是在onUpdate触发器中:

exports.onUpdatePizza = functions.firestore
  .document('pizzas/{pizzaId}')
  .onUpdate(async (change, context) => {
    return change.after.ref.update({ updatedAt: new Date() });
});

但是,上面的代码将陷入无限循环。如何在没有不良副作用的情况下实现这一目标?

3 个答案:

答案 0 :(得分:1)

将此添加到函数内部:

// simply input data
const after: any = change.after.exists ? change.after.data() : null;
const before: any = change.before.exists ? change.before.data() : null;

const canUpdate = () => {
    // if Update Trigger
    if (before.updatedAt && after.updatedAt) {
        if (after.updatedAt._seconds !== before.updatedAt._seconds) {
            return false;
        }
    }
    // if Create Trigger <--- assuming you use it
    if (!before.createdAt && after.createdAt) {
        return false;
    }
    return true;
}

if (canUpdate()) {
   // update code here
}

这是我的通用更新代码:https://stackoverflow.com/a/60963531/271450

答案 1 :(得分:0)

答案 2 :(得分:0)

在您的函数中,请先检查更新日期是否在当前时间的某个阈值以内,然后再进行更新。这样可以防止不必要的写入,但是缺点是,如果更新非常频繁,则更新时间可能会滞后于该阈值。