【问题标题】:How to update all children in Firebase?如何更新 Firebase 中的所有孩子?
【发布时间】:2016-01-20 10:33:08
【问题描述】:

我正在尝试使用 firebase 更新一级树上的所有子节点。例如这样的:

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

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

【问题讨论】:

  • 为了清楚地理解,我有这个结构 auctions->item1->a->true` 并且项目我有不止一个。有什么办法可以改变所有a?谢谢

标签: javascript firebase firebase-realtime-database


【解决方案1】:

您不需要那个空的 .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 下的所有内容,您可以这样做 firebase.child("auctions/a").set(true);

有多种方法可以满足您的需求。我只是不能 100% 确定您真正需要什么。

【讨论】:

  • 我写的firebase结构可能不是绝对清晰。我有这个结构:auctions > item1 > a = 5,我想将所有 {{a}} 设置为 0(例如)。有什么办法可以写出这样的:firebase.child("auctions").child("*").update({a: 0});Thanks
【解决方案2】:

您需要在某个时候遍历所有子节点。这是一种简单的方法:

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

两个 sn-ps 完成相同的任务,但后者发送单个命令,因此在网络故障的情况下更具弹性。

【讨论】:

猜你喜欢
  • 2018-09-17
  • 2017-04-14
  • 1970-01-01
  • 2021-04-22
  • 2019-01-21
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多