我有一个名为addons
的集合。该集合包含字段name
,desc
,price
和type
。
我立即通过this.afs.collection<AddOns>('addons');
获取数据,返回AngularFirestoreCollection<AddOns>
。我在Firestore Collection中为data
定义了以下类文件。
AddOns.ts
export class AddOns{
name?: string;
desc?: string;
price?: number;
type?: string;
}
export class AddOnId extends AddOns{
aid?: string;
}
由于我从该集合中也需要元数据,因此我创建了AddOnId
类,扩展了AddOns
类。要获取所有数据,请按以下步骤操作:
addOnsList: Observable<AddOnId[]>;
this.addOnsList = this.afs.collection<AddOns>('addons').snapshotChanges().map( x => {
return x.map(data => {
const addon = data.payload.doc.data() as AddOns;
const aid = data.payload.doc.id;
return {aid, ... addon}
});
})
This post 提到了无法使用groupby
的问题,因为将返回的数据为Observable of Array
,并且还有答案如何转换Observable of array
1}} Observable of values
使用flatMap
。
然后我尝试了
const grouped = this.afs.collection<AddOns>('addons').snapshotChanges()
.flatMap( arr => Observable.from(arr))
.groupBy(d => d.payload.doc.data().type);
但即使这样也不会产生预期的结果。我怎么能做到这一点?我应该如何根据类型对数据进行分组并将其转换为值的Observable?
答案 0 :(得分:0)
在Observable映射中进行分组,例如return x.map { ... }.groupBy { ... }
因为您打算转换数据,而不是Observable本身。 lodash对于数组有很好的groupBy实现。