我的问题是,在从Firestore检索值之后,必须在对象中添加一些属性。
让我们想象一下,界面看起来像这样:
export interface Incident {
uId: string;
title: string;
reportedBy: User;
likedBy: string[];
content: string;
}
但是为了简化数据模型,在Firestore中,属性reportBy:为相应文档的用户添加了reportBy:字符串(此字符串值表示来自已添加事件的用户的uId)。因此,现在我想获取来自Firestore后端的所有事件的列表,并希望不使用相关用户的uId来显示它们,而是使用其名字和姓氏来显示它们。
因此,我想构造一个函数,该函数首先获取事件集合,但是在返回事件集合之前,应该存在另一个数据库请求,以获取相关用户的用户信息。之后,我想在返回事件列表之前添加此用户信息。我现在拥有的解决方案看起来像这样,但是我不知道如何解决向事件对象添加其他属性的问题。
getRecentIncidents(): Observable<Incident[]>{
const incidents: AngularFirestoreCollection<Incident> = this.angularFirestore.collection<Incident>('incidents');
return incidents ? incidents.snapshotChanges().pipe(
map(incidents => {
return incidents.map(incident => {
const data = incident.payload.doc.data();
console.log('reportedBy: ' + data.reportedBy);
const user: AngularFirestoreDocument<User> = this.angularFirestore.doc('users/' + data.reportedBy);
user ? user.snapshotChanges().pipe(
map(user => {
const data = user.payload.data() as User;
const uId = user.payload.id;
return {uId, ...data}
})
) : null;
const uId = incident.payload.doc.id;
return { uId, user, ...data, }
})
})
) : null;
}
有人可以帮助我吗?非常感谢您的建议!