У меня есть chatrooms
- коллекция, в которой хранятся участники и названия чатов. У меня также есть userchats
, в котором хранятся идентификаторы участников и сохраняются идентификаторы чатов с true
в качестве ключа / значения следующим образом:
chatrooms
- e1iqOnWeO2YTUCpUJ2O (1st chatroom)
- Members
- member 1 uid
- member 2 uid
- Title
- Hu19FkkW4Haoiw94OY4 (2nd chatroom)
- Members
- member 1 uid
- member 3 uid
- Title
...
userchats
- member 1 uid
- e1iqOnWeO2YTUCpUJ2O: true
- Hu19FkkW4Haoiw94OY4: true
- member 2 uid
- e1iqOnWeO2YTUCpUJ2O: true
- member 3 uid
- Hu19FkkW4Haoiw94OY4: true
Я хотел бы показать чаты на основе данных в userchats
. Пока у меня есть следующий код, который получает все чаты и отображает их всем пользователям (независимо от того, являются ли они их частью или нет).
private chatrooms: Observable<Chatroom[]>;
private chatroomCollection: AngularFirestoreCollection<Chatroom>;
constructor(private afs: AngularFirestore) {
this.chatroomCollection = this.afs.collection<Chatroom>('chatrooms');
this.chatrooms = this.chatroomCollection.snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
let data = a.payload.doc.data();
let id = a.payload.doc.id;
return { id, ...data };
});
})
);
}
Моя попытка состоит в том, чтобы следующий код был в конструктор, но он не работает и не выдает ошибки:
constructor(private afs: AngularFirestore) {
this.afs.collection('userchats').doc(this.currentUserId).get().subscribe(chatrooms => {
let chatroomId: string[] = Object.keys(chatrooms.data());
this.afs.collection<Chatroom>('chatrooms').doc(chatroomId[0]).snapshotChanges().pipe(
map(actions => {
//Not getting here
console.log(actions.payload.data())
return actions.payload.data() as Chatroom;
})
);
});
}
Если это поможет, у меня нет каких-либо правил, установленных в базе данных.