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

时间:2016-11-05 16:37:44

标签: javascript firebase firebase-realtime-database

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

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

2 个答案:

答案 0 :(得分:5)

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

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

这个

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

清除该特定密钥中的整个数据。

请改为尝试:

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

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

我希望这有帮助

答案 1 :(得分:0)

好像你应该阅读firebase refs。您似乎没有更新ref,因此您正在更新(可能是)根数据库对象(我从未向Firebase传递空白参考,所以我不能100%确定使用{{1}的行为是什么}。

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

class bot:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.s = None

    def connect_to_server(self):
        sock = socket.socket()
        self.s = ssl.wrap_socket(sock)
        self.s.connect((self.host, self.port))

实际想要做的事情似乎是引用子节点firebase.database().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
  }
})