我试试firebase更新一层树上的所有孩子。例如:
firebase.child("auctions").child().update({a: true});
这给了我错误,因为孩子是空的。有没有什么方法可以更新所有拍卖的孩子?
答案 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
两个片段都完成了相同的操作,但后者发送了一个命令,因此在网络出现故障时更具弹性。