我正在使用带有云功能的测试版Firestore。在我的应用中,我需要触发一个在onCreate
侦听/company/{id}/point/{id}
事件的函数并执行插入(collection('event').add({...}))
我的问题是:使用Firestore的云功能需要幂等功能。我不知道如何确保如果我的函数连续两次使用相同的事件触发,我将不会添加两个具有相同数据的文档。
我发现context.eventId
可以解决这个问题,但我不知道如何使用它。
exports.creatingEvents = functions.firestore
.document('/companies/{companyId}/points/{pointId}')
.onCreate((snap, context) => {
//some logic...
return db.doc(`eventlog/${context.params.companyId}`).collection('events').add(data)
})
答案 0 :(得分:6)
两件事:
app.use(express.static(`${__dirname}/public`))
的属性。如果存在,请在该功能中不执行任何操作。context.eventId
的值放在您添加的文档中的属性中。这可以防止多次调用函数为给定的事件id添加多个文档。
答案 1 :(得分:3)
为什么不set
文档(通过上下文中的事件ID索引)而不是创建它?这样,如果你写两次,你只会覆盖而不是创建新记录。
https://firebase.google.com/docs/firestore/manage-data/add-data
这种方法使写操作具有幂等性。