我想通过在子集合onCreate
中创建新事件后使用createdEvents
云函数来为Firestore添加用户字段中的新字段(名称:“ joko”)
在createdEvents
子集合中添加新文档之前,数据将如下所示:
我使用此代码执行该操作
export const updateEventsCreatedNumberWhenUserCreateNewEvent1 = functions.firestore
.document('users/{userId}/createdEvents/{eventId}')
.onCreate(async (snap, context) => {
const userID = context.params.userId
const userRef = snap.ref.firestore.collection('users').doc(userID)
const userSnapshot = await userRef.get()
if (userSnapshot) {
// if data is available
const numberOfEventCreated = userSnapshot.data().numberOfEventCreated
return userRef.update({
numberOfEventCreated: numberOfEventCreated + 1
})
} else {
const newUserData = userSnapshot.data()
newUserData.numberOfEventCreated = 1
return userRef.set(newUserData)
}
});
但是我总是在我刚创建的numberOfEventCreated字段中得到NaN。 Firebase云功能控制台日志上没有错误
出了什么问题?
答案 0 :(得分:2)
最初,您的文档存在,所以if (userSnapshot)
是true
。但是它没有字段numberOfEventCreated
,因此userSnapshot.data().numberOfEventCreated
是undefined
。而undefined + 1
是NaN
(表示非数字)。
您将希望以不同的方式来抓住条件:
if (userSnapshot) {
// if data is available
const numberOfEventCreated = userSnapshot.data().numberOfEventCreated
return userRef.update({
numberOfEventCreated: (numberOfEventCreated || 0) + 1
})
} else {
const newUserData = userSnapshot.data()
newUserData.numberOfEventCreated = 1
return userRef.set(newUserData)
}
(numberOfEventCreated || 0) + 1
的计算结果为文档中的实际值,或者(如果文档中没有numberOfEventCreated
,则为0
。