Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase云Firestore noSQL_Javascript_Angular_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript Firebase云Firestore noSQL

Javascript Firebase云Firestore noSQL,javascript,angular,firebase,google-cloud-firestore,Javascript,Angular,Firebase,Google Cloud Firestore,数据库包含用户、问题和答案的集合。见下文 Users ------ firstName lastName Questions ------- date question Answers ------- date answer questionId userId 用例:获取用户的答案和这些答案的问题。显示问题和答案 我的代码: //User Questions with Answers this.db.collection('Answers', ref => ref.where

数据库包含用户、问题和答案的集合。见下文

Users
------
firstName
lastName

Questions
-------
date
question

Answers
-------
date
answer
questionId
userId
用例:获取用户的答案和这些答案的问题。显示问题和答案

我的代码:

    //User Questions with Answers
this.db.collection('Answers', ref => ref.where('userId', '==', userId) ).snapshotChanges()
  .subscribe(data => {
    return data.map(a => {
      const data = a.payload.doc.data();
      console.log(data);
      console.log(data.questionId);
      //qa.answers.push(data);

      //Get each question from the answer now
      // bummer that this is a seperate request, very chatty
      var question = this.db.collection('Questions')
        .doc(data.questionId).valueChanges()
          .subscribe(ref => {

            console.log(ref);
            return ref;
          });   

      return {data, question};
    });
  });
2个问题:

  • 这是最好的方式吗?它会打电话给服务器,以获取每个答案的问题。看起来很健谈
  • 它确实能够获取数据,尽管很健谈,但现在我该如何显示它呢
  • 谢谢,我是noSQL和Firebase的新手。

    2-如何显示?“展示它”在哪里?在前端~

    如果使用AngularFire,您可以尝试:

    in.ts

    answersCol : AngularFirestoreCollection<Answers>;
    answersObersArray: Observable<Answers[]>;
    answersArray: Array<Answers>;
    
    this.answersCol  = this.db.collection('survey/' + userId);
    this.answersObersArray = this.answersCol .valueChanges();
    
    this.answersObersArray .subscribe(answers => {
       this.answersArray = answers ;//--Working with arrays
    });
    
    answersCol:AngularFirestoreCollection;
    回答:可以观察到;
    答:数组;
    this.answersCol=this.db.collection('survey/'+userId);
    this.answersobsarray=this.answersCol.valueChanges();
    this.answersarray.subscribe(answers=>{
    this.answersArray=answers;//--使用数组
    });
    
    in.html

    <table class="table table-bordered">
      <tbody *ngFor="let answer of answersArray ">
             <tr style="font-weight:bold">
               <td>{{ answer  }}</td>
              </tr>
      </tbody>
    </table>
    
    
    {{答案}
    
    (测试)

    如果使用Observable,您可以尝试:

    in.ts

    answersCol : AngularFirestoreCollection<Answers>;
    answersObersArray: Observable<Answers[]>;
    answersArray: Array<Answers>;
    
    this.answersCol  = this.db.collection('survey/' + userId);
    this.answersObersArray = this.answersCol .valueChanges();
    
    this.answersObersArray .subscribe(answers => {
       this.answersArray = answers ;//--Working with arrays
    });
    
    var answersCol=this.db.collection('answers/'+userId')//检查您的结构
    应答器阵列:可观测//如果你有答案课
    this.answersObservArray=this.answersCol.valueChanges();
    
    in.html

    <table class="table table-bordered">
      <tbody *ngFor="let answer of answersArray ">
             <tr style="font-weight:bold">
               <td>{{ answer  }}</td>
              </tr>
      </tbody>
    </table>
    
    {(answersObservArray | async)}
    
    (没有经过全面测试)

    “似乎很健谈。”有点含糊不清。如果您关心性能,我建议您对其进行测量。总的来说,我发现这些类型的查询比开发人员预期的性能要好得多。