我在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
但这还不是预期的结果 . 数据被锁定为渲染或其他东西,所以我还需要帮助