在Firebase数据库(Web)中读取/写入嵌套数据

时间:2018-04-08 21:54:35

标签: javascript firebase firebase-realtime-database

这个看似简单的问题肯定与许多问题重复,所以我为此道歉。当它被标记为这样时,不会被冒犯......但我还没有找到一个明确,直接和现代的答案,这似乎与我期望的一样。

enter image description here

鉴于"第一项",我如何返回" subItems"匹配该标题的对象的数组?

此外,如何将新的子项目推送到该数组(如果我在编写而不是阅读时应该以某种不同的方式定位该数组)

这个的背景是"项目"是顶级db.ref('items')

1 个答案:

答案 0 :(得分:2)

要按属性查找项目,您需要运行对该属性进行排序和过滤的查询。所以在你的情况下:

var ref = firebase.database().ref("items");
var query = ref.orderByChild("title").equalTo("Item One");
query.once("value", function(snapshot) {
  snapshot.forEach(function(item) {
    console.log(item.key); // -L8...EMj7P
    console.log(item.child("subItems").val()); // logs the sub items
    // console.log(item.ref.child("subItems").push().set(...)); // adds a sub item
  });
});

请注意,嵌套数据类型是Firebase数据库中的反模式,因为它通常会在以后导致问题。更惯用的方法是使用两个顶级列表(例如itemssubItems)然后使用相同的键:

items: {
  -L8...EMj7P: {
    title: "Item One"
  }
},
subItems: {
  -L8...EMj7P: {
    ...
  }
}