从文档获取嵌套子集合

时间:2018-06-21 01:16:35

标签: javascript angular typescript firebase ionic-framework

所以我有一个数据结构,如下所示。用户有一个月的集合,一个月有一个类别的集合,而类别有一个交易的集合。我很难从查询中获取所需的数据。我可以得到如下所示的月份,但是我很难弄清楚如何从月份文档中获取所有类别文档。

user
    email
    name
    --months collection
          month - name, amount
          --categories collection
                category - name, amount <-- I need all of these docs
                --transactions
                    transaction - amount, date

在这里可以获取月份,但是现在我需要月份中的所有类别,因此可以在html中遍历它们。我认为我需要该月的ID,因此我可以提取该月的ID,但是据我了解,Observable没有ID。有没有简单的方法可以做到这一点,或者我需要重新考虑我的数据结构?

  monthCollection: AngularFirestoreCollection<Month>;

  monthName: string;
  totalSpent: number;

  categories: Observable<Category[]>;

  constructor(public navCtrl: NavController,
              public navParams: NavParams,
              public alertCtrl: AlertController,
              private firestoreProvider: FirestoreProvider) {

    // Just need the data from the first month
    this.firestoreProvider.getMonthObservable().forEach(doc => {
      this.monthName = doc[0].name.substring(0, 3);
      this.totalSpent = doc[0].totalSpent;
    });
  }

1 个答案:

答案 0 :(得分:0)

除非您有一定的理由,否则Firestore会提供更好的(复合)查询功能。如果必须使用Realtime Database,则需要按照其文档Structure Your Database中提到的那样,对数据库体系结构进行展平。

  

数据结构的最佳做法

     
      
  • 避免嵌套数据
  •   
  • 扁平数据结构
  •