【问题标题】:Firebase Firestore Get Subcollections for each document in a collectionFirebase Firestore 获取集合中每个文档的子集合
【发布时间】:2019-02-15 11:55:56
【问题描述】:

我的数据库有一个部分的集合,每个部分都包含一个子部分的子集合。

这是我需要创建的数组:

[
  {
    "sectiontitle": "first section",
    "sectiontype": "1",
    "__id__": "6jwwukHmOs1743yC13vH",
    "subsections": [
      {
        "desc": "blah blah blah",
        "__id__": "KTq4MJTEMbDfR33RoX9J"
      },
      {
        "desc": "blah blah blah",
        "__id__": "ASFSADFSAFSADFSADFFS"
      }
    ]
  },
  {
    "sectiontitle": "second section",
    "sectiontype": "1",
    "__id__": "5jwwDHEDOs1743yC13vG",
    "subsections": [
      {
        "desc": "blah blah blah",
        "__id__": "DFG4MJTEMbDfR33DDDDD"
      },
      {
        "desc": "blah blah blah",
        "__id__": "ASDFGHFSAFSADFSHJFRD"
      }
    ]
  }
]

我的代码是:

    // get sections
    firebase.firestore().collection("sections").get().then((sections) => {
      var myarray = [];
      var i = 0;
      sections.forEach((section) => {
        var sectiondata = section.data();
        sectiondata.__id__ = section.id
        sectiondata.subsections = [];
        myarray.push(sectiondata);

        //get subsections
        firebase.firestore().collection("sections").doc(sectiondata.__id__).collection("subsections").get().then((subsections) => {
          subsections.forEach((subsection) => {
            var subsectiondata = subsection.data();
            subsectiondata.__id__ = subsection.id;
            myarray.push('sections.' + i + '.subsections', subsectiondata); // problem is i index is not correct
          });
        });

        i++;

      });
    });

这个问题是i 索引不正确,因为读取的部分已经完成并在开始读取子部分时循环通过foreach。我不熟悉 Javascript 承诺,所以我希望有人可以帮助我解决这个问题?

基本上,对于每个部分,添加小节。

谢谢。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    请试试这个,让我知道是否工作正常。请注意,SubjectBehavior 是从 RxJs 库导入的,我的代码是打字稿代码,因为我认为您使用的是打字稿。

       sb = new SubjectBehavior<[]>();
        var basicArray = [];
               firebase.firestore().collection("sections").get().then((sections) => {
                  var myarray = [];
                  basicArray = [];
                  var count = 0;
    
                  sections.forEach((section) => {
                    var sectiondata = section.data();
                    sectiondata.__id__ = section.id
                    sectiondata.subsections = [];
                    myarray.push(sectiondata);
                count++;
                if( count === sections.length()) {
                    sb.next(myarray); //or .emit(), i dont remember
                }
                    //get subsections
    
                });
    
            sb.subscribe( (myArrayElements: any[]) => {
                myArrayElement.foreach( (element) => {
        firebase.firestore().collection("sections").doc(element.__id__).collection("subsections").get().then((subsections) => {
                          subsections.forEach((subsection) => {
                            var subsectiondata = subsection.data();
                            subsectiondata.__id__ = subsection.id;
                            basicArray.push('here element data (sectionData)' + '' + '.subsections', subsectiondata); 
                          });
                        });
    
                      });
        });
        });
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 2018-10-21
      • 2021-08-06
      • 2021-05-09
      • 2020-08-15
      • 2019-11-13
      • 2019-10-06
      • 2018-04-09
      • 2018-04-03
      相关资源
      最近更新 更多