大家好,我在这里得到了奇怪的行为。当用户单击按钮时,我尝试更新一个特定的子节点。这是我的代码:
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
答案 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
}
})