Javascript 如何使用AngularFireDatabase以更好的方式查询列表?

Javascript 如何使用AngularFireDatabase以更好的方式查询列表?,javascript,angular,firebase-realtime-database,firebase-authentication,angularfire2,Javascript,Angular,Firebase Realtime Database,Firebase Authentication,Angularfire2,我正在使用AngularFireDatabase处理firebase中的数据。我需要在Firebase中检索并更新下表。我目前正在用下面的方法做这件事。有没有什么方法可以让我用它来更好地查询?因为,我正在下载整个表,然后再次上传。我不想下载整个提交列表,只想直接将一个对象推送到提交数组。提前谢谢 // Get form submissions for a specific form getFormSubmissions(key: string) { this.userSubmission

我正在使用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文档建议不要使用阵列的众多原因之一,而应该使用阵列。根据该文件:

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


我还建议您查看这篇古老但仍然非常真实的博文。

Hey@developerr。你有机会看看我下面的答案吗?这有意义吗?如果我的答案有用,请单击向上投票按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就会知道你已经得到了(足够的)帮助。也请参见
this.formSubs.submission.push(data);
this.formService.submitUserValues(this.formSubs);