在JSON中添加不带密钥标识符的元素-FIREBASE

在JSON中添加不带密钥标识符的元素-FIREBASE,json,typescript,firebase,firebase-realtime-database,Json,Typescript,Firebase,Firebase Realtime Database,这是我的firebase数据库的结构和用于创建firebase结构的json文件 “菜单”是一个成分列表,按类别划分,如“Pane”(英语中的面包)。“窗格”中有一个字段“lista”,该字段包含所有面包类型(每种面包类型有3个字段:“attivo”、“nome”、“prezzo”)。 我需要要求用户添加一个新的成分,以便添加一个包含“attivo”、“nome”、“prezzo”字段的新元素 问题是我的子成分(面包类型)没有标识符,因此我不知道如何在没有id键的情况下将子元素添加到“List

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

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

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

使用此代码(在我的typescript文件中使用)所有“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”内容都被我推送的数组所取代,但是数组中有新元素,所以它可以工作

是的,可以将值保存到一个数组中,存储在
lista
节点下,但这会产生一些“额外的复杂性”。有关更多详细信息,请参阅Firebase博客文章:

在没有(自然)uid的情况下向列表中添加一些数据的推荐方法是使用
push
方法: .

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

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


如果不希望自动生成
窗格
节点的标识符(如“-LStoAsjJ…”等字母数字值),则需要自己生成它们。但是,您必须使用a来生成这个序列,这也会增加一些复杂性。最好使用
push()
并重新设计前端代码,这样您可以处理Firebase生成的字母数字UID。

谢谢您的帮助,但是您的代码更改了我的json结构(请查看我问题中添加的图像),我想避免这种情况……您的意思是什么“您的代码更改了我的json结构”?您的意思是,您现在拥有的不是整数的记录标识符,而是字母数字(神秘)值吗?我的意思是,正如您在我的第一张图片中所看到的,我在“lista”字段中的成分没有标识符。我有lista=[{element1},{element2}如果我将json上传到firebase中,我将获得您在同一图像中看到的结构。0、1等不是对象的标识符,而是元素在我的“lista”中的“位置”“外地。如果我插入一个带有push或set的新元素,它创建的每个元素都有一个标识符,如果我从firebase导出我的新json,那么结构就发生了变化(如第二幅图所示)。这个新结构与我以前的结构不兼容。好的,我明白了。实际上,在列表中添加具有自动生成uid的节点会将导出从数组转换为对象。如果您想在本例中使用Firebase控制台的导出JSON功能,我认为没有解决方案。这完全取决于您对这个JSON到底做了什么,以及为什么需要通过控制台导出它(除了出于“管理”目的)。你可以通过JavaScript SDK甚至REST API获取这些数据。幸运的是,在我的应用程序中,只有一个用户会更改数据,因此我没有并发问题。