【问题标题】:Firebase Web update() deletes all other child nodesFirebase Web update() 删除所有其他子节点
【发布时间】:2016-11-06 14:16:53
【问题描述】:

大家好,我在这里遇到了奇怪的行为。当用户单击按钮时,我尝试更新一个特定的子节点。这是我的代码:

var updates2 = {};
var offer = {
  minusAccandShare: 2,
}
updates2['/offerLight/' + keyReal] = offer;
updates2['/offer/' + keyReal] = offer;
return firebase.database().ref().update(updates2);

一切正常,正确的节点已更新,但在更新 minusAccandShare 时,其他所有内容都将被删除

结构如下:

offer
  jifdjsiavdas
    minusAccandShare: -6
    offerName: "Replacement"
    offerText: "You have the choice to..."
    ...

它变成了

offer
  jifdjsiavdas
    minusAccandShare: 2

我多次使用 Firebase 指南中描述的这种方法,它总是很有效。但是在那里我用一个新的密钥创建了全新的节点,所以没有什么可以删除的。

谢谢大家:D

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    您的代码中实际发生的情况如下:

    您正在完全写入密钥,从而擦除数据集中的所有属性。

    这个

    updates2['/offer/' + keyReal] = offer;
    

    清除该特定键中的全部数据。

    试试这个:

    firebase.database().ref('offer/' + keyReal).update({
        minusAccandShare: 2,
      });
    

    这允许您确保更改 Firebase 数据集中的指定属性。

    希望对你有帮助

    【讨论】:

    • 埃比尼泽是对的。在这种情况下,在更新时——即使使用“更新”功能而不是“设置”——数据对象将被完全覆盖。我需要在包含上面写的密钥后传递我的对象。
    【解决方案2】:

    看来您应该阅读firebase refs。您似乎没有更新 ref,因此您正在更新(大概)根 DB 对象(我从未将空白 ref 传递给 Firebase,所以我不能 100% 确定使用 firebase.database().ref() 的行为是什么。

    我已经“编译”了你的代码,所以我们可以看到你传递给空 ref 的内容:

    var updates2 = {};
    
    updates2['/offerLight/' + keyReal] = offer;
    updates2['/offer/' + keyReal] = offer;
    
    // Becomes...
    
    updates2 = {
      '/offerLight/jifdjsiavdas': {
        minusAccandShare: 2
      },
      '/offer/jifdjsiavdas': {
        minusAccandShare: 2
      }
    }
    
    // So...
    
    return firebase.database().ref().update( updates2 );
    
    // is sent as
    
    return firebase.database().ref().update({
      '/offerLight/jifdjsiavdas': {
        minusAccandShare: 2
      },
      '/offer/jifdjsiavdas': {
        minusAccandShare: 2
      }
    })
    

    看起来您实际上想要做的是引用子节点jifdjsiavdas。你会想用这样的引用指向它:

    firebase.database.ref( 'offer/' + keyReal ).update( offer );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多