加入集合数组结果中的对象
Join with object from a collection array result
我有 2 个合集:
用户:uid、displayName。
活动:用户可以创建的文档。它还包含 userUid 及其对用户集合的引用
我得到这样的活动:
this.activities = this.afs.collection<Activity>('activities')
.snapshotChanges()
.pipe(
map((actions) => {
return actions.map((a) => {
const data = a.payload.doc.data();
data.uid = a.payload.doc.id;
return data;
})
}));
那么,我的问题是如何加入并获取用户数据的最佳方式是什么?
我这样试过:
actReference.snapshotChanges().pipe(
map((actions) => {
return actions.map((a) => {
const actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData };
}))
})
}));
但它 returns 我
Observable<Observable<Activity>[]>>
您需要应用 rxjs 管道运算符链接。
actReference.snapshotChanges().pipe(
map((actions) => {
actions.map((a) => ({
let actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
actData.displayName = a.payload.doc.name;
return actData;
});
}),
map((userData) => {
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData };
}))
})
}));
@suresh-kumar-ariya 的答案不是我的最终结果,但对我帮助很大,我最终得到了这段代码:
return actReference.snapshotChanges().pipe(
map((actions) => {
return actions.map((a) => {
const actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData } as Activity;
}))
})
}),
mergeMap(obs => combineLatest(obs))
);
我有 2 个合集:
用户:uid、displayName。
活动:用户可以创建的文档。它还包含 userUid 及其对用户集合的引用
我得到这样的活动:
this.activities = this.afs.collection<Activity>('activities')
.snapshotChanges()
.pipe(
map((actions) => {
return actions.map((a) => {
const data = a.payload.doc.data();
data.uid = a.payload.doc.id;
return data;
})
}));
那么,我的问题是如何加入并获取用户数据的最佳方式是什么?
我这样试过:
actReference.snapshotChanges().pipe(
map((actions) => {
return actions.map((a) => {
const actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData };
}))
})
}));
但它 returns 我
Observable<Observable<Activity>[]>>
您需要应用 rxjs 管道运算符链接。
actReference.snapshotChanges().pipe(
map((actions) => {
actions.map((a) => ({
let actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
actData.displayName = a.payload.doc.name;
return actData;
});
}),
map((userData) => {
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData };
}))
})
}));
@suresh-kumar-ariya 的答案不是我的最终结果,但对我帮助很大,我最终得到了这段代码:
return actReference.snapshotChanges().pipe(
map((actions) => {
return actions.map((a) => {
const actData = a.payload.doc.data();
actData.uid = a.payload.doc.id;
return this.userService.getUserDocById(actData.userUid).snapshotChanges()
.pipe(
map((userActions) => {
const userData = userActions.payload.data();
return { user: { uid: userData.uid, displayName: userData.displayName }, ...actData } as Activity;
}))
})
}),
mergeMap(obs => combineLatest(obs))
);