【发布时间】:2019-08-20 09:04:44
【问题描述】:
如何触发 Firestore 中任何集合中的任何文档更改的函数?我想管理createdAt 和updatedAt 时间戳。我有很多集合,不想为每个集合单独注册触发器。那时我不妨为add、set 和update 创建包装函数。
如何注册一个在任何文档被修改时触发的回调?
编辑:
此时(2019-08-22),我决定只创建一个包装函数来实现此功能。接受的答案不保持模式少。基于this article,我创建了这个upset 函数来管理时间戳并避免“文档不存在”错误:
const { firestore: { FieldValue } } = require('firebase-admin')
module.exports = async function upset (doc, data = {}) {
const time = FieldValue.serverTimestamp()
const update = { updatedAt: time }
const updated = { ...data, ...update }
try {
const snapshot = await doc.get()
if (snapshot.exists) {
return doc.update(updated)
} else {
const create = { createdAt: time }
const created = { ...updated, ...create }
return doc.set(created)
}
} catch (error) {
throw error
}
}
【问题讨论】:
-
我除了下面的答案,你可以看看这个答案stackoverflow.com/questions/52660962/…(特别是“HOWEVER”部分)。
-
参考文章现已付费。您如何将
upset绑定到所有 Firestore 中的每个集合/子集合?为什么叫upset而不是upsert(update+insert)? -
据我所知,它无法绑定。每当我触摸文档时,我都会在我的云函数中手动调用不高兴。名称
upset是两个 firebase 函数名称的组合,update和set。update+set=upset.
标签: firebase triggers google-cloud-firestore google-cloud-functions