我有一个包含数组的大型JSON文件。我正在使用Firebase作为我应用的后端,我想使用FirebaseArray来存储数据。
从我的Angular应用程序创建FirebaseArray并向其添加数据很简单,但我的应用程序的性质是我已经获取了数据,我需要首先以某种方式导入Firebase。
在Firebase网站上,导入的唯一选项是来自JSON。当我导入我的JSON文件时,结果是一个带有数字键的对象,我意识到它就像一个数组,但是有一个主要问题。
{
"posts": {
"0": {
"id": "iyo0iw",
"title": "pro patria mori"
},
"1": {
"id": "k120iw",
"title": "an english title"
},
"2": {
"id": "p6124w",
"title": "enim pablo espa"
}
}
}
用户可以更改项目的位置,项目的位置也是项目唯一标识的方式。对于多个用户,这意味着可能会出现以下问题。
如果以下操作在很短的时间内发生,Firebase无法确定Sarah在更改标题时看到的帖子[1],并且无法确定要更新的帖子对象。< / p>
我想要的是一种导入我的JSON文件并使数组成为FirebaseArrays的方法,而不是具有数字键的对象,它们就像数组一样,并且共享上述问题。
答案 0 :(得分:1)
您导入数据库的内容实际上是一个数组。 Firebase实时数据库仅将数据真正表示为键/值对的嵌套层次结构。数组只是一组键/值对,其中键都是数字,通常从0开始。这正是您在问题中显示的结构。
答案 1 :(得分:1)
要生成通过使用AngularFire FirebaseArray写入数据库而创建的数据类型,您需要预处理JSON。
在客户端上生成Firebase推送ID,您可以通过不带参数调用push
来生成一个。
您可以使用Firebase推送ID ID将数组转换为对象:
let arr = ["alice", "bob", "mallory"];
let obj = arr.reduce((acc, val) => {
let key = firebase.database().ref().push().key;
acc[key] = val;
return acc;
}, {});