我在这里引用了这个例子来过滤掉重复的事件。我看到事件id包含=
和/
字符。事件id是否已编码为base64?如果在id中发现斜杠/
,这有时会产生问题,因为文档路径会变成嵌套集合。但令我惊讶的是,我无法对它们进行base64解码。
例如,我可以跟踪的-2 id是-LJ79W2cT0inTJbzFEHH/Aw3i10M=
和IQUaGYPQpdYZw3mT3dHRca/Q7tU=
。
我不认为云函数中的事件ID有任何定义。您应该将它们视为不透明字符串,不要对它们的内容或内容的含义做出任何假设,如果您多次获得相同的事件ID,则它们表示相同的事件。
不能直接使用触发器的EventId作为文档ID,因为它可以包含斜杠。
你应该先去掉斜线:
exports.onGoodsUpdate = functions
.database
.ref("goods/{id}")
.onUpdate((change, context) => {
const data = change.after.val() as Goods
const repository = new GoodsReportRepository()
const report: GoodsReport = {
id: context.eventId.replace("/", ""),
groupCode: data.code,
}
return repository.save(report)
})