我想向我的Firestore索要一系列文档,这些文档中包含引用其他文档的信息。
获取“用户”文档=>返回“项目”文档的ID => foreach(获取“项目”文档)
getUserOwnedItems(uid:string):Observable<Item[]>{
return this.firestore
.collection<any>(`members`, ref => ref.where('uid', '==', uid))
.valueChanges()
.pipe(
switchMap(ids => { // these ids are representing the "item" ids
return ids.map(id => {
return this.firestore
.doc<Item>(`items/${id.itemId}`)
.valueChanges();
});
})
,concatAll() // <-- Iam not sure about this
);
}
问题是Iam期望可观察到一系列物品。相反,我得到了一个可观察到的物品。
如何将其转换为
Observable<Item[]>
? 预先感谢!
我在Firestore中的结构如下:
members : [
{
uid:string,
itemId:string,
...
}
]
items : [
{
id:string,
...
}
]
用例换句话说: 我想获取与由其uid标识的特定用户相关的所有商品。
更新: 我发现所有concats mergs或forkJoins在这种情况下都不起作用,因为firebase可观察对象将永远不会完成。
我可以做类似...
return this.firestore
.doc<Item>(`items/${id.itemId}`)
.valueChanges().pipe(first());
但这会中断我的实时连接。除此之外,每次调用此函数都将导致在FireStore上进行读取,这将导致费用。