Firebase Web update()删除所有其他子节点

Firebase Web update() deletes all other child nodes

本文关键字:其他 子节点 删除 Web update Firebase      更新时间:2023-09-26

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

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

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

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

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

删除该键下的所有数据。

试试这个:

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

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

希望对您有所帮助

似乎你应该阅读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 );