Firestore:仅显示用户所属的聊天室?

时间:2020-04-30 16:34:29

标签: typescript firebase google-cloud-firestore angularfire2

我有chatrooms,这是一个存储聊天室成员和标题的集合。我也有userchats,它持有成员的uid,并以true作为键/值来存储聊天uid:

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;
        })
      );
    });
  }

如果有帮助,我的数据库中没有设置任何任何规则。

0 个答案:

没有答案
相关问题