如何解决如何使用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);
解决方法
您将JavaScript数组存储在Firebase中,不幸的是,这意味着变得难以操作。要将项目添加到数组中,必须知道该数组中已经存在多少个项目,这需要您首先阅读它。
这是Firebase文档建议不使用数组而不建议使用uses so-called push IDs to add items to lists的众多原因之一。从该文档中:
使用
push()
方法将数据追加到多用户应用程序中的列表中。每次将新的子级添加到指定的Firebase引用中时,push()
方法都会生成一个唯一密钥。通过为列表中的每个新元素使用这些自动生成的键,多个客户端可以同时将子代添加到同一位置,而不会发生写冲突。push()
生成的唯一密钥是基于时间戳的,因此列表项将按时间顺序自动排序。
我还建议您查看此古老但仍然非常真实的博客文章Best Practices: Arrays in Firebase。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。