【问题标题】:How to query the list in a better way using AngularFireDatabase?如何使用 AngularFireDatabase 以更好的方式查询列表?
【发布时间】:2021-02-20 05:05:42
【问题描述】:

"@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 angular firebase-realtime-database firebase-authentication angularfire2


    【解决方案1】:

    您在 Firebase 中存储了一个 JavaScript 数组,不幸的是,这意味着它变得难以操作。要将项添加到数组中,您必须知道该数组中已经存在多少项,这需要您首先阅读它。

    这是 Firebase 文档建议不要使用数组,而是使用 uses so-called push IDs to add items to lists 的众多原因之一。从该文档中:

    使用push() 方法将数据附加到多用户应用程序中的列表。每次将新子项添加到指定的 Firebase 引用时,push() 方法都会生成一个唯一键。通过为列表中的每个新元素使用这些自动生成的键,多个客户端可以同时将子元素添加到同一位置,而不会发生写入冲突。 push() 生成的唯一键是基于时间戳的,因此列表项会自动按时间顺序排列。

    我还建议您查看这篇旧但仍然非常真实的博文Best Practices: Arrays in Firebase

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2013-11-14
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多