【问题标题】:Firebase update data not workingFirebase 更新数据不起作用
【发布时间】:2017-02-22 23:23:46
【问题描述】:

您好,我想更新 firebase 数据,但是当我更新它时插入新数据而不是更新我设置的特定数据,即姓氏等于“hoo”

fb.orderByChild("Lastname").equalTo('hoo').once("value", function(snapshot){
  console.log(snapshot.ref());
  console.log(snapshot.val());
  // var snapref = snapshot.ref();
  snapshot.ref().update({
    FirstName: 'yoyo1'  
  });
})

编辑:

fb.orderByChild("Lastname").equalTo('hoo').once("child_added", function(snapshot){
    console.log(snapshot.ref());
    console.log(snapshot.val());
    // var snapref = snapshot.ref();
    snapshot.ref().update({
      FirstName: 'yoyo1'      
    });  
  })

查看底部代码,新的编辑代码通过使用 'child_added' 而不是使用 value

【问题讨论】:

    标签: angularjs firebase firebase-realtime-database


    【解决方案1】:

    当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。

    这意味着,当您调用 snapshot.ref() 时,您会获得对您查询的位置 (fb) 的引用而不是到您选择的孩子。

    解决办法是循环遍历结果:

    fb.orderByChild("Lastname").equalTo('hoo').once("child_added", function(snapshot){
        snapshot.forEach(function(child) {
            child.ref().update({
                FirstName: 'yoyo1'      
            });  
        }
    })
    

    顺便说一句,我很确定我在过去几天给出了完全相同的答案。因此,我强烈建议您潜伏在firebase-database 标签上,并在阅读其他人的难题时学习。

    【讨论】:

    • 此代码无法运行。首先,倒数第二行缺少右括号。更重要的是,我收到一条错误消息:“child.ref 不是函数”。我看不出“孩子”是 Firebase 引用。
    • 取决于您的 Firebase SDK 版本,可能需要为 firebase.ref(不带括号)。我回答了 2.x(OP 似乎正在使用),您可能正在使用 3.x,其中 DataSnapshot.ref 是属性而不是函数:firebase.google.com/docs/reference/js/…
    猜你喜欢
    • 2021-05-04
    • 2020-12-26
    • 2016-05-12
    • 2021-05-12
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多