如何更新Firebase中的所有孩子?

时间:2016-01-20 10:33:09

标签: javascript firebase firebase-realtime-database

我试试firebase更新一层树上的所有孩子。例如:

firebase.child("auctions").child().update({a: true});

这给了我错误,因为孩子是空的。有没有什么方法可以更新所有拍卖的孩子?

2 个答案:

答案 0 :(得分:2)

您不需要空create_table(:users) 次调用。

.child()要做的是改变 firebase.child("auctions").update({a: true});/auctions/a/whatever

如果你真的想要在树的一个层面更新所有孩子"那么/auctions/a/true可能会更好用,因为它会用您提供的对象替换端点上的所有数据。所以,如果你跑了 .set然后firebase.child("auctions").set({a: true});下的所有内容都将替换为/auctions

如果你不想把{a: true}下的所有东西炸掉,而是想把/auctions下的所有东西炸掉,你可以做 auctions/a

有多种方法可以满足您的需求。我不能100%确定你真正需要的东西。

答案 1 :(得分:1)

您需要在某个时刻循环所有孩子。这是一个简单的方法:

firebase.child("auctions").on('value', function(snapshot) {
    snapshot.ref().update({a: true}); // or snapshot.ref if you're in SDK 3.0 or higher
});

或者,您可以先收集所有更新,然后将其作为一个(可能很大的)更新声明发送到Firebase:

var updates = {};
firebase.child("auctions").on('value', function(snapshot) {
    updates["auctions/"+snapshot.key+"/a"] = true;
});
snapshot.ref().update(updates);  // or snapshot.ref if you're in SDK 3.0 or higher

两个片段都完成了相同的操作,但后者发送了一个命令,因此在网络出现故障时更具弹性。