javascript - 如何使用 AngularFireDatabase 以更好的方式查询列表?
问题描述
"@angular/fire": "^5.2.3",
我正在使用 AngularFireDatabase 来操作 firebase 中的数据。我需要在 Firebase 中检索和更新下表。我目前正在使用以下方法进行操作。有什么方法可以用来更好地查询吗?因为,我正在下载整个表格,然后再次上传。我不想下载整个提交列表,而只想将一个对象直接推送到提交数组。提前致谢。
// Get form submissions for a specific form
getFormSubmissions(key: string) {
this.userSubmissionsList = this.db.list('/form-submissions', ref => ref.orderByChild('formId').equalTo(key));
return this.userSubmissionsList;
}
getSingleFormForSubmission(key: string) {
this.submission = this.db.object('/form-submissions/' + key);
return this.submission;
}
this.formService.getFormSubmissions(this.formId).snapshotChanges().subscribe(response => {
let key = null;
response.forEach(item => {
const a: any = item.payload.toJSON();
key = item.key;
});
this.formService.getSingleFormForSubmission(key).valueChanges().subscribe(resp => {
if (resp.submission === undefined) { resp.submission = []; }
this.formSubs = resp;
});
});
推送数据如下:
this.formSubs.submission.push(data);
this.formService.submitUserValues(this.formSubs);
解决方案
您在 Firebase 中存储了一个 JavaScript 数组,不幸的是,这意味着它变得难以操作。要将项添加到数组中,您必须知道该数组中已经存在多少项,这需要您首先阅读它。
这是 Firebase 文档建议不要使用数组,而是使用所谓的推送 ID 将项目添加到列表的众多原因之一。从该文档中:
使用该
push()
方法将数据附加到多用户应用程序中的列表。push()
每次将新子项添加到指定的 Firebase 引用时,该方法都会生成一个唯一键。通过为列表中的每个新元素使用这些自动生成的键,多个客户端可以同时将子元素添加到同一位置,而不会发生写入冲突。生成的唯一键push()
是基于时间戳的,因此列表项会自动按时间顺序排序。
我还建议您查看这篇古老但仍然非常真实的博文 Best Practices: Arrays in Firebase。
推荐阅读
- javascript - 精确字符串匹配文件名数组 JavaScript/Nodejs
- c# - 通过点击它来选择对象unity2d c#
- powershell - 使用 Powershell 审核权限
- android - SQLite - 在 SQLite pre 3.25.0 中实现等效的 row_number 和窗口结果
- javascript - 在屏幕上过滤内容 Javascript 下拉菜单
- python - Plotly 表示缺少 go.Bar 的颜色条参数
- javascript - IE 支持的 javascript URL 替代方案
- python - 用python写一个excel公式所有列
- ios - 通过 Diawi 将 iOS 应用程序安装到非测试设备
- python - 使用 Python 从具有多个条目的 JSON 数组中获取值