json - 在没有键标识符的 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”内容都被我推送的数组替换,但是该数组具有新元素,所以它可以工作!
解决方案
是的,可以将值保存到您将存储在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。
推荐阅读
- powershell - 如何将变量传递给满足 ValidateSet 的函数?
- react-native - expo 构建 web 页面路径
- reactjs - 使用 React 从 CMS 获取数据的最佳方法是防止加载时间?
- vue.js - vue-i18n 延迟加载正在加载所有语言环境
- java - 在 Jpanel 中放置 7 个组件,前 6 个分 3 行 2 列。第三行的最后一个,但在列之间
- c++ - 成员声明中的模板类类型别名替换失败
- java - 使用 Java,如何获得 Huffman 树的编码树?
- python - 如何从用户输入中读取直到在 Python 中找到换行符?
- python - 如何创建列表矩阵?
- kubernetes - Kubernetes HPA -- 无法获取资源内存的指标:资源指标 API 没有返回指标