为什么在Firestore中触发onCreate在子集合中的新文档后添加新字段时总是得到NaN?

时间:2018-09-02 12:57:14

标签: firebase google-cloud-firestore google-cloud-functions

我想通过在子集合onCreate中创建新事件后使用createdEvents云函数来为Firestore添加用户字段中的新字段(名称:“ joko”)

createdEvents子集合中添加新文档之前,数据将如下所示:

(之前) enter image description here

我使用此代码执行该操作

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云功能控制台日志上没有错误

(之后) enter image description here

出了什么问题?

1 个答案:

答案 0 :(得分:2)

最初,您的文档存在,所以if (userSnapshot)true。但是它没有字段numberOfEventCreated,因此userSnapshot.data().numberOfEventCreatedundefined。而undefined + 1NaN(表示非数字)。

您将希望以不同的方式来抓住条件:

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