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

如何使用Firebase Database存储和检索数组值?附代码求助

解决Firebase数据库中用户收听时长数组的更新问题

你的当前代码会直接用新数组[timearr]覆盖原有listen_track字段,而不是在现有数据基础上追加新的收听时长。以下是两种可行的解决方案:

方案1:读取现有数组后追加更新

先获取用户已有的listen_track数组,将新的时长数据追加进去,再整体更新字段:

function update() {
  calculateTime(lap);
  console.log("update");
  var today = new Date();
  var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
  var time = today.getHours() + ":" + today.getMinutes();

  const userRef = database.ref('listener/' + mobile);
  // 一次性读取用户当前数据
  userRef.once('value')
    .then(snapshot => {
      const userData = snapshot.val() || {};
      // 初始化数组:如果没有listen_track字段则设为空数组
      const existingTracks = userData.listen_track || [];
      // 追加新的收听时长数据
      existingTracks.push(timearr);

      const updates = {
        code: code,
        date_db: date,
        time: time,
        mobile: mobile,
        listen_track: existingTracks
      };

      return userRef.update(updates);
    })
    .then(() => {
      alert('MANAN BHARNE KE LIYE CLICK KARE');
    })
    .catch(error => {
      console.error('更新失败:', error);
    });
}

注意:这种方式存在并发风险——如果多个客户端同时读取并更新,可能会覆盖彼此的修改。

方案2:使用Firebase Push ID存储列表(推荐)

Firebase官方推荐用唯一键值对替代传统数组存储列表数据,避免索引冲突和并发问题。通过push()方法自动生成唯一ID,将每条收听时长作为独立条目存储:

function update() {
  calculateTime(lap);
  console.log("update");
  var today = new Date();
  var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
  var time = today.getHours() + ":" + today.getMinutes();

  const userRef = database.ref('listener/' + mobile);
  // 更新基础用户信息
  userRef.update({
    code: code,
    date_db: date,
    time: time,
    mobile: mobile
  });

  // 向listen_track添加新条目,push()自动生成唯一ID
  userRef.child('listen_track').push(timearr)
    .then(() => {
      alert('MANAN BHARNE KE LIYE CLICK KARE');
    })
    .catch(error => {
      console.error('添加收听时长失败:', error);
    });
}

这种方式下,listen_track会变成一个对象,结构类似:

"listen_track": {
  "-NxYabc123": "时长数据1",
  "-NxYdef456": "时长数据2"
}

后续读取时,可以通过遍历对象的键来获取所有收听时长条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:57:19