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

Node.js中使用动态对象名更新数据库的技术问题

解决动态生成对象键名的问题

我正在爬取网页数据并将其存入数据库,需求是让存入的对象拥有动态生成的名称。在下方示例代码中,我希望变量URLString的值能成为底部对象的键名,但目前存入数据库的每个对象键名都是字符串'URLString',而非URLString变量的实际值。我查阅了相关资料但未找到解决方法,希望能得到帮助。

你的代码示例:

$('.live-update').each(function(i, element){
 var homeTeamAbbr = $(this).find('tbody').children('tr').eq(0).find('a').html().split("alt/").pop().split('.svg')[0]
 var awayTeamAbbr = $(this).find('tbody').children('tr').eq(1).find('a').html().split("alt/").pop().split('.svg')[0]
 var homeTeam = $(this).find('tbody').children('tr').eq(0).find('a.team').text().trim();
 var awayTeam = $(this).find('tbody').children('tr').eq(1).find('a.team').text().trim();
 var gameTime = $(this).find('.pregame-date').text().trim()
 console.log(homeTeam + " @ " + awayTeam + ": " + gameTime)
 console.log(homeTeamAbbr + " @ " + awayTeamAbbr)
 var urlDate = moment().format('YYYYMMDD');
 var URLString = "NBA_" + urlDate + "_" + awayTeamAbbr + "@" + homeTeamAbbr;
 var docRef = database.collection('Schedule').doc(urlDate).collection(URLString);
 var boxScoreURL = "www.cbssports.com/nba/gametracker/boxscore/" + URLString
 var objectNamed = URLString
 var setAda = docRef.add({URLString: {
 homeTeam: homeTeam,
 awayTeam: awayTeam,
 date: gameTime,
 homeTeamAbbr: homeTeamAbbr,
 awayTeamAbbr: awayTeamAbbr,
 boxScoreURL: boxScoreURL
 }});
});

问题原因

你遇到的问题是因为在JavaScript对象字面量中,直接写{URLString: ...}时,URLString会被当作字符串字面量作为键名,而不是解析成变量的值——这是JS对象字面量的默认行为。

两种解决方案

方案1:使用ES6计算属性名(推荐)

ES6引入了计算属性名的语法,你只需要把变量用方括号[]包裹起来,就能让JS把它解析成变量的值作为键名,写法非常简洁:

var setAda = docRef.add({
  [URLString]: {
    homeTeam: homeTeam,
    awayTeam: awayTeam,
    date: gameTime,
    homeTeamAbbr: homeTeamAbbr,
    awayTeamAbbr: awayTeamAbbr,
    boxScoreURL: boxScoreURL
  }
});

方案2:先创建对象再动态赋值

如果你的运行环境不支持ES6(现在绝大多数环境都支持了,这里仅作兼容参考),可以先创建一个空对象,再通过变量作为键来赋值:

// 先创建空对象
var gameData = {};
// 用变量作为键,把比赛数据赋值进去
gameData[URLString] = {
  homeTeam: homeTeam,
  awayTeam: awayTeam,
  date: gameTime,
  homeTeamAbbr: homeTeamAbbr,
  awayTeamAbbr: awayTeamAbbr,
  boxScoreURL: boxScoreURL
};
// 存入数据库
var setAda = docRef.add(gameData);

这样修改后,存入数据库的对象键名就会是URLString变量的实际值(比如类似NBA_20240520_LAL@BOS这样的字符串),而不是固定的'URLString'了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:16