我在Firestore中的查询中遇到数据返回问题 . 试图在集合之间进行某种“连接”,我无法在最终查询(内部)中正确检索数据 .

我正在使用angularfire2来执行数据库实例 .

我得到UNIQUE ID的数据库模式(Usuario)的工作方式如下:

usuario(集合) - >集合中的文档'usuario'(唯一id) - > cupom(subcollection) - > subcolletion中的文档'cupom'(唯一id) - >文档数据

Firestore Usuario collection schema

我通过UNIQUE ID检索数据的数据库模式(Cupom)的工作方式如下:

cupom(集合) - >集合中的文档'cupom'(唯一ID) - >文档数据

Firestore Cupom collection schema


cupom.service.ts - 执行查询的服务

import { Injectable } from '@angular/core';
import { AngularFirestore, AngularFirestoreDocument,AngularFirestoreCollection} from 'angularfire2/firestore';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class CupomProvider {

constructor(private db: AngularFirestore) {}

retrievePerUser(uid: string): Observable<any>{

return this.db.collection('usuario').doc(uid).collection('cupom', 
  ref => ref.where('owner','==',true)
  .where('active','==',true)
  .where('visible','==',true)).snapshotChanges().map(res => {        
    return res.map(doc => {
      return this.db.collection('cupom').doc(doc.payload.doc.id).snapshotChanges().map(data => {
        return data.payload.data();
      });
    });
  });
 }
}

meuscupons.ts - 接收数据的组件/页面

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, LoadingController } from 'ionic-angular';
import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/Observable';
import { CupomProvider } from './../../providers/cupom/cupom.service';

@IonicPage()
@Component({
  selector: 'page-meuscupons',
  templateUrl: 'meuscupons.html',
})
export class MeuscuponsPage {

  public cupons: Observable<any>;
  loading = this.loadingCtrl.create({
    spinner : 'dots',
    content: 'Aguarde, carregando as ofertas do pacote...'      
  });

  constructor(public navCtrl: NavController, 
              public navParams: NavParams, 
              private cupomService: CupomProvider,
              private auth: AngularFireAuth,
              public loadingCtrl: LoadingController) {
                this.loading.present();
              }

    ionViewDidLoad() {
    // console.log('ionViewDidLoad MeuscuponsPage');
    this.cupons = this.cupomService.retrievePerUser(this.auth.auth.currentUser.uid)
      .map((data) => {
        this.loading.dismiss();
        // return data
        console.log(data);
      });
  }
}

meuscupons.html - 用于呈现异步数据的页面

<ion-header>

  <ion-navbar>
    <ion-title>meuscupons</ion-title>
  </ion-navbar>

</ion-header>


<ion-content padding>
  <button ion-button color="danger" (click)="voltarHome()">Voltar Home</button>
  <ion-list>
    <ion-item *ngFor="let item of cupons | async" (click)="item(item)">{{item.titulo}}</ion-item>
  </ion-list>
</ion-content>

控制台中的查询结果

在控制台中,可以看到它返回正确数量的项目,但不能正确返回这些项目的数据 . 好像他们被封锁或者他们不存在一样 .

Query response in console of browser


我真的不知道我的错误在哪里,是否's in the junction of the collections in the Service or the way I' m返回这些数据 . 我已经在很多方面尝试过了,包括尝试遵循这个答案Joining Flattened Data,但它也没有用 . 我只是以这种方式离开代码来举例说明我的问题 .

有人可以帮帮我吗?

OBS:抱歉我的英语不好 .


更新

当我读到这个问题时,我接近了我想要的东西How to bind multiple query results in angularfire2 with firestore? ...所以我对代码进行了一些小改动,并将其保留为:

return this.db.collection('cupom').doc(doc.payload.doc.id).snapshotChanges().map(data => {
            return data.payload.data();

为了这:

return this.db.firestore.collection('cupom').doc(doc.payload.doc.id).get().then(data => {
            return data.data();
          });

结果似乎有点不同:

Different response in console of browser

但这还不是预期的结果 . 数据被锁定为渲染或其他东西,所以我还需要帮助

Screen to render and console browser