我想在我的updatedAt
文档中有一个pizza
字段,该字段在每次特定文档中发生更新时都应更新。我认为处理此问题的最佳方法是在onUpdate
触发器中:
exports.onUpdatePizza = functions.firestore
.document('pizzas/{pizzaId}')
.onUpdate(async (change, context) => {
return change.after.ref.update({ updatedAt: new Date() });
});
但是,上面的代码将陷入无限循环。如何在没有不良副作用的情况下实现这一目标?
答案 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)
在您的函数中,请先检查更新日期是否在当前时间的某个阈值以内,然后再进行更新。这样可以防止不必要的写入,但是缺点是,如果更新非常频繁,则更新时间可能会滞后于该阈值。