【问题标题】:Adding an extra field to all records in Firebase Realtime database向 Firebase 实时数据库中的所有记录添加额外字段
【发布时间】:2020-12-12 23:38:17
【问题描述】:

我正在尝试向名为“all”的特定子表中的一个表中的每条记录添加一个名为“卡路里”的新字段

这个想法是遍历每条记录并执行 .update 添加新字段。

这是我目前的代码:

const addCalories = () => {
    const recipesRef= firebase
      .database()
      .ref("Recipes");
    
    recipesRef.on("value", (snapshot) => {      
      const recipes = snapshot.val();
      
      for (let id in recipes) {     
        recipesRef.child(id).child("all").update({ calories: "" });
      }
    });
  }

这是一个示例记录结构

我收到以下错误:

错误:Reference.update 失败:第一个参数必须是包含要替换的子项的对象。

说实话,我什至不确定我的方法是否正确。

【问题讨论】:

    标签: node.js firebase-realtime-database google-cloud-functions


    【解决方案1】:

    这可能更接近你想要的:

    recipesRef.once("value", (snapshot) => {
      snapshot.forEach((child) => {      
        child.ref.child("all").update({ calories: 0 });
      }
    });
    

    主要变化:

    • 使用once 而不是on,因为您只想在每次执行此代码时进行一次此更改。使用 on 可能会导致比需要更多的更新,并可能导致无休止的递归。
    • 使用内置的 DataSnapshot.forEach 方法而不是 JavaScript for 循环遍历结果。
    • 将值设置为数字0,而不是空字符串。我强烈建议将数值存储为数字,而不是字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多