Angularfire2 将更多数据附加到用户集合

Angularfire2 attach more data to user collection

我正在创建一个用户可以创建群组的应用程序。群组集合存储在每个用户内部,如果群组广告成员的所有者对应的用户 id 和角色只保存在群组集合中。因此,当所有者访问组成员时,我希望显示用户的完整信息,这些信息位于其他组之外的另一个集合中。

这是我的 firestore 数据库中的两个集合

this.afs.collection(`users/${ownerId}/groups/${gid}/users`)
this.afs.doc(`users/${ownerId}`) //full user data

这是我在我的服务中访问用户的方式

getGroupUsers(gid, ownerId) {
return this.afs.collection(`users/${ownerId}/groups/${gid}/users`).snapshotChanges().pipe(
    map(actions => actions.map(a => {
      const data = a.payload.doc.data();
      const userId = a.payload.doc.id;
      return { userId, ...data };
    })
    )
  );
}

这里 userId 是每个用户的唯一 ID,我希望向 ...data 对象添加更多数据。我尝试了很多方法都失败了,这就是我试图实现的目标

getGroupUsers(gid, ownerId) {
return this.afs.collection(`users/${ownerId}/groups/${gid}/users`).snapshotChanges().pipe(
  map(actions => actions.map(a => {
    const data = a.payload.doc.data();
    const userId = a.payload.doc.id;
    //return { userId, ...data };
    return this.afs.doc(`users/${userId}`).valueChanges().pipe(
      map(userData => {
        return {userId, ...data, ...userData}
      })
    )
  })
  )
);
}

我使用 angular 8.1.2Rxjs 6.4.0。 请帮忙。

未测试,但您可以使用 mergeMap or switchMap and combineLatest 的组合。 switchMap 切换到内部可观察对象,combineLatest 执行嵌套请求。

getGroupUsers(gid, ownerId) {
  return this.afs.collection(`users/${ownerId}/groups/${gid}/users`).snapshotChanges().pipe(
    switchMap(actions => combineLatest(
      actions.map(a => {
        const data = a.payload.doc.data();
        const userId = a.payload.doc.id;
        return this.afs.doc(`users/${userId}`).valueChanges().pipe(
          map(userData => {
            return { userId, ...data, ...userData }
          })
        )
      })
    ))
  );
}