Google Firebase - 重新格式化 JSON 输出
Google Firebase - reformat JSON output
我正在使用 Google Firebase,它生成 JSON 数据如下:
{
"tasks": {
"-LzH6kQjS_nY4P97EONB": {
"createdBy": "Andrew",
"date": "\"2020-01-23T11:17:24.213Z\"",
"description": "Some task description.",
"done": false
}
}
}
我想将其转换成这种格式:
[
{
"id": "-LzH6kQjS_nY4P97EONB",
"createdBy": "Andrew",
"date": "\"2020-01-23T11:17:24.213Z\"",
"description": "Some task description.",
"done": false
}
]
我想我可以处理转换部分(如果你们在这里没有看到一些不可能的东西)但是我想不出 "returning" 转换 JSON 文件的方法所以它总是link 下可用。有没有一种方法可以轻松做到这一点,而且不会危及 Firebase 安全性?
以下是一些可能的解决方案:
制作Database Triggered Cloud Function that will run each time a task is added at your tasks
path. That function should use the newly added data to update an array at a different path, like tasksAsArray
. You can use a transaction读取现有数组,添加新项并保存新数组。然后在 Qlik 的“.json”url 中使用该路径。
制作一个 HTTP Callable Function 将从数据库中读取您的 tasks
并 return 一个您想要的格式的数组作为响应。
修改客户端代码,直接写入所需格式的数据。
对于解决方案 1,随着时间的流逝和数据的增长,事务的性能将开始下降,但可能不会很明显。如果您的响应中不需要非常旧的数据,除了只在数组中添加任务之外,您还可以从中删除旧数据,以限制数组的大小。
使用解决方案 2,您可以Limit Queries仅包括最近几个月或几年的任务。
解决方案 3 要求客户准确知道已经有多少任务*,以便他们将新任务添加到适当的索引处。你说会有20个并发用户,所以有多个客户端写入同一个路径的风险,会发生覆盖。
为防止覆盖,您可以使用 this one 等数据库规则,并在客户端处理错误(使用正确的索引重试)。
您也可以从客户端执行数据库事务,但是随着数组变大,这会使添加任务变慢。云函数不关心做某事是否需要几秒钟,但用户关心:)
*要查找已经有多少任务,您可以读取整个数组并计算元素。相反,您可以创建一个后台云函数来维护 taskCount
路径,这就是:任务数量。然后客户可以简单地读取该数字。
我正在使用 Google Firebase,它生成 JSON 数据如下:
{
"tasks": {
"-LzH6kQjS_nY4P97EONB": {
"createdBy": "Andrew",
"date": "\"2020-01-23T11:17:24.213Z\"",
"description": "Some task description.",
"done": false
}
}
}
我想将其转换成这种格式:
[
{
"id": "-LzH6kQjS_nY4P97EONB",
"createdBy": "Andrew",
"date": "\"2020-01-23T11:17:24.213Z\"",
"description": "Some task description.",
"done": false
}
]
我想我可以处理转换部分(如果你们在这里没有看到一些不可能的东西)但是我想不出 "returning" 转换 JSON 文件的方法所以它总是link 下可用。有没有一种方法可以轻松做到这一点,而且不会危及 Firebase 安全性?
以下是一些可能的解决方案:
制作Database Triggered Cloud Function that will run each time a task is added at your
tasks
path. That function should use the newly added data to update an array at a different path, liketasksAsArray
. You can use a transaction读取现有数组,添加新项并保存新数组。然后在 Qlik 的“.json”url 中使用该路径。制作一个 HTTP Callable Function 将从数据库中读取您的
tasks
并 return 一个您想要的格式的数组作为响应。修改客户端代码,直接写入所需格式的数据。
对于解决方案 1,随着时间的流逝和数据的增长,事务的性能将开始下降,但可能不会很明显。如果您的响应中不需要非常旧的数据,除了只在数组中添加任务之外,您还可以从中删除旧数据,以限制数组的大小。
使用解决方案 2,您可以Limit Queries仅包括最近几个月或几年的任务。
解决方案 3 要求客户准确知道已经有多少任务*,以便他们将新任务添加到适当的索引处。你说会有20个并发用户,所以有多个客户端写入同一个路径的风险,会发生覆盖。
为防止覆盖,您可以使用 this one 等数据库规则,并在客户端处理错误(使用正确的索引重试)。
您也可以从客户端执行数据库事务,但是随着数组变大,这会使添加任务变慢。云函数不关心做某事是否需要几秒钟,但用户关心:)
*要查找已经有多少任务,您可以读取整个数组并计算元素。相反,您可以创建一个后台云函数来维护 taskCount
路径,这就是:任务数量。然后客户可以简单地读取该数字。