如何在Firestore中的任何集合中触发任何文档更改的函数?我想管理createdAt
和updatedAt
时间戳。我有很多集合,不想为每个集合单独注册触发器。在这一点上,我还不如为add
,set
和update
创建 Package 函数。
如何注册一个在任何文档被修改时触发的回调?
编辑:
在这个时候(2019-08-22),我决定只创建一个 Package 器函数来实现这个功能。公认的答案是不维护无模式性。基于这篇文章,我创建了这个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
}
}
1条答案
按热度按时间4c8rllxm1#
如文档中所述,您可以在文档路径中使用通配符。更具体地说,“您可以定义任意数量的通配符来替换显式集合或文档ID”
因此,以下云函数将适用于根集合下的文档:
如果您有子集合,则需要编写另一个Cloud Function,如下所示:
如果你有一个子集合的话……