You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase云函数动态ID字段更新异常:字符串参数未解析

问题描述

在Firebase Cloud Functions中尝试通过存储在const变量中的动态ID,使用点符号更新Firestore对应字段时遇到两个问题:

  1. 使用双引号包裹键名时,变量未被解析,Firestore创建了以字面字符串badges.${ObjectId}.badgeName为键的新字段(对应截图:字段错误创建截图)。
  2. 将双引号替换为反引号后,出现语法错误(对应截图:语法错误截图)。

相关代码如下:

exports.badgeUpdated = functions.firestore.document("badges/{docId}").onUpdate(async (change, context ) => {
  const ObjectId = change.after.id;
  const newObject = change.after.data();
  const newBadgeName = newObject.badgeName;
  console.log(`New BadgeName ${newBadgeName}`);
  console.log(`New BadgeID ${ObjectId}`);
  const querySnapshot = await admin.firestore().collectionGroup("keekzCards").where("badgeContains", "array-contains", ObjectId).get();
  querySnapshot.forEach((doc) => {
    doc.ref.update({"badges.${ObjectId}.badgeName": newBadgeName});
    console.log(doc.id);
  });
  return null;
});

解决方案

要在JavaScript对象字面量中使用动态键名,必须用方括号语法包裹动态生成的键,以此让JavaScript正确解析变量。以下是两种可行的修改方式:

方式一:模板字符串+方括号直接拼接

直接用模板字符串生成字段路径,并用方括号包裹作为对象键:

querySnapshot.forEach((doc) => {
  doc.ref.update({
    [`badges.${ObjectId}.badgeName`]: newBadgeName
  });
  console.log(doc.id);
});

方式二:先拼接字段路径字符串

先将完整的字段路径拼接为字符串,再用方括号作为对象键:

querySnapshot.forEach((doc) => {
  const fieldPath = `badges.${ObjectId}.badgeName`;
  doc.ref.update({
    [fieldPath]: newBadgeName
  });
  console.log(doc.id);
});

两种写法都会正确解析ObjectId变量,生成类似badges.xxx123.badgeName的合法嵌套字段路径,从而精准更新Firestore中对应的字段。

内容的提问来源于stack exchange,提问作者SRel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:20:01