所以我有这样的可调用云功能:
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})
中所见,我想从客户端设置键和值。这样我就可以动态更新文档。我希望updatedKey
和updatedValue
来自客户端
但是我上面的代码似乎无法正常工作,因为我收到了以下警告:
updatedKey
已声明但从未使用过。那么更新Firestore文档时如何动态更改键和值?我可以这样做吗?
答案 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)