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.2
和 Rxjs 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 }
})
)
})
))
);
}
我正在创建一个用户可以创建群组的应用程序。群组集合存储在每个用户内部,如果群组广告成员的所有者对应的用户 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.2
和 Rxjs 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 }
})
)
})
))
);
}