gpt4 book ai didi

angular - 将文档引用作为字段过滤

转载 作者:太空狗 更新时间:2023-10-29 17:11:05 25 4
gpt4 key购买 nike

我有 3 个集合:

  1. User => 有一些字段
  2. 组织 => 有一些领域
  3. UserOrg 的字段如下:
    • uid//用户id
    • orgid//orgid
    • userDetails//user/uid 等用户文档的文档引用
    • orgDetails//org/uid 等 org 文档的文档引用

现在我需要获取用户详情的用户详情

我的代码是:

return this.dbCollectionService.userOrganizationCollection.snapshotChanges()
.pipe(map(res => {
return res.map(data => {
var userData = data.payload.doc.data()
let userDetails : any;
if (userData.userDetails) {

this.angularFirestore.doc(userData.userDetails).valueChanges().subscribe(res => {
userDetails = res;
console.log(userDetails);
});

return { id, ...userDetails }

}).filter( f => f.organizationId != undefined && f.organizationId == orgId)
}));

这能够正确地控制结果,但不返回数据。

可能从数据引用中获取数据需要时间并且返回语句执行得更早。

最佳答案

return { id, ...userDetails } 在订阅 this.angularFirestore 之前执行.doc(userData.userDetails).valueChanges().

在订阅中订阅不是一个好主意,您应该使用其他 pipable 运算符(如 switchMap)来链接这两个调用:

return this.dbCollectionService
.userOrganizationCollection.snapshotChanges()
.pipe(
map(res => res.map(data => data.payload.doc.data())),
map(userDatas => userDatas.filter(_ => _)),
map(userDatas => userDatas.map(this.angularFirestore.doc(userData.userDetails).valueChanges()
.pipe(map(userDetails => ({ id, ...userDetails }))))),
switchMap(userDatas$ => combineLatest(userDatas$)),
map(users => users.filter( f => f.organizationId != undefined && f.organizationId == orgId))
);

关于angular - 将文档引用作为字段过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com