首页 > 解决方案 > 在没有键标识符的 JSON 中添加元素 - FIREBASE

问题描述

这是我的 firebase 数据库的结构和我用来创建该 firebase 结构的 json 文件。

在此处输入图像描述

“菜单”是成分列表,按类别划分,例如“窗格”(英语中的面包)。“窗格”具有字段“lista”,其中包含所有面包类型(每种面包有 3 个字段:“attivo”、“nome”、“prezzo”)。我需要让用户添加一个新成分,所以要添加一个具有“attivo”、“nome”、“prezzo”字段的新元素。

问题是我的子成分(面包类型)没有标识符,所以我不知道如何在没有 id 键的情况下将孩子添加到“Lista”。

使用此代码(在我的打字稿文件中使用)所有“lista”字段都被新元素替换,并且我不能使用.Child()因为我没有要传递的标识符:

firebase.database().ref('/menu/pane/lista').set({ 
      nome: data['nome'],
      prezzo: data['prezzo'],
      attivo: false, 
});

是否可以在没有标识符的情况下添加元素并遇到像我的 json 文件这样的情况?

编辑 如果我使用 set 或 push,我的 json 结构会改变,我不希望这样: 在此处输入图像描述 提前谢谢你。

解决 了我已经通过解决方法解决了这个问题。我检索填充“lista”的数组并像在普通数组中一样推送新成分,而不是在firebase上使用新元素将数组推送到“lista”。通过这种方式,所有“lista”内容都被我推送的数组替换,但是该数组具有新元素,所以它可以工作!

标签: jsontypescriptfirebasefirebase-realtime-database

解决方案


是的,可以将值保存到您将存储在lista节点下的数组中,但这会产生一些“额外的复杂性”。有关更多详细信息,请参阅此 Firebase 博客文章:https ://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

在没有(自然)uid 的情况下将一些数据添加到列表的推荐方法是使用以下push方法: https ://firebase.google.com/docs/reference/js/firebase.database.Reference#push 。

因此,您应该执行以下操作,Firebase 会自动为您的新记录生成一个唯一 ID:

firebase.database().ref('/menu/pane/lista').push({ 
      nome: data['nome'],
      prezzo: data['prezzo'],
      attivo: false
});

如果您不希望pane自动生成节点的标识符(如“-LStoAsjJ....”之类的字母数字值),则需要自己生成它们。但是你必须使用事务来生成这个序列,这也会增加一些复杂性。使用push()和重新设计前端代码可能会更好,这样您就可以处理 Firebase 生成的字母数字 uid。


推荐阅读