更新Firestore文档时如何动态更改键和值?

时间:2019-12-17 07:53:00

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

所以我有这样的可调用云功能:

const db = admin.firestore()

exports.changeEventDataInUserSubcollection = functions.https.onCall(async (data, context) => {


    const updatedKey = data.updatedKey
    const updatedValue = data.updatedValue
    const creatorID = data.creatorID
    const eventID = data.eventID

    try {

        return db.doc(`users/${creatorID}/createdEvents/${eventID}`).update({updatedKey: updatedValue})


    } catch (error) {
        console.log(error)
        return Promise.resolve(null)
    }


})

正如您在.update({updatedKey: updatedValue})中所见,我想从客户端设置键和值。这样我就可以动态更新文档。我希望updatedKeyupdatedValue来自客户端

但是我上面的代码似乎无法正常工作,因为我收到了以下警告:

enter image description here

updatedKey已声明但从未使用过。那么更新Firestore文档时如何动态更改键和值?我可以这样做吗?

2 个答案:

答案 0 :(得分:1)

要拥有动态密钥,您需要执行以下操作

 return db.doc(`users/${creatorID}/createdEvents/${eventID}`).update({[updatedKey]: updatedValue});

答案 1 :(得分:1)

这里的问题与Cloud Functions或Firestore无关。这是JavaScript语法。如果要将变量的值用作对象的键,则需要对对象使用square bracket syntax

return db
    .doc(`users/${creatorID}/createdEvents/${eventID}`)
    .update({ [updatedKey]: updatedValue })

请注意updatedKey周围的方括号,这些括号告诉JavaScript您想将变量的值替换为键的名称。

您本可以实现以下相同目的:

const object = {}
object[updatedKey] = updatedValue

return db
    .doc(`users/${creatorID}/createdEvents/${eventID}`)
    .update(object)