angular - 'array-contains' 查询不适用于引用的 Firestore

标签 angular typescript firebase google-cloud-firestore angular7

我有一个包含成员数组的“聊天”集合,其中包含参与聊天的用户。问题是我想获取当前用户参与的所有聊天。

我用这个查询来做:

getUserChats(): Observable<Chat[]> {
    return this.auth.currUser
      .pipe(
        take(1),
        switchMap(user => this.afs
            .collection('chats', ref => ref.where('members', 'array-contains', `/users/${user.uid}`))
            .snapshotChanges()
            .pipe(
              map(actions => {
                return actions.map(action => {
                  const data = action.payload.doc.data() as Chat;
                  const id = action.payload.doc.id;
                  return {id, ...data};
                });
              })
            ) as Observable<Chat[]>
        )
      );
  }

这适用于字符串,但不适用于引用。我怎样才能让它也适用于引用文献?

Image with Collections

绿色有效,红色无效

绿色:字符串 红色:引用

最佳答案

@Alex Mamo 的回答是正确的,您需要一个 DocumentReference。

注意:您不能自己创建一个!

您必须通过查询 firebase 来获取引用!

代码:

return this.auth.currUser
      .pipe(
        take(1),
        switchMap(user => this.afs
            .collection('chats', ref => ref.where('members', 'array-contains', this.afs
              .collection('users')
              .doc<User>(user.uid)
              .ref))
            .snapshotChanges()
            .pipe(
              map(actions => {
                return actions.map(action => {
                  const data = action.payload.doc.data() as Chat;
                  const id = action.payload.doc.id;
                  return {id, ...data};
                });
              })
            ) as Observable<Chat[]>
        )
      );

关键部分是“值(value)”部分,即:

this.afs
              .collection('users')
              .doc<User>(user.uid)
              .ref

您查询并然后使用 .ref 获取引用!

就是这样!这就是您查询 DocumentReference 的方式!

关于angular - 'array-contains' 查询不适用于引用的 Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205155/

相关文章:

Angular 2 Material 步进器不工作

javascript - 值总是从本地存储返回 null (Ionic 3 + angular 5)

node.js - 导入 typescript 的 Node 请求类型

angular - 如何通过 ID Angular 4 + Firestore 获取一份文档

angular - 如何使用 HttpClient Angular 4 正确过滤 json

angular - 如何在 typescript 中格式化日期?

Firebase 用户枚举攻击

angular - 如何显示所有其他用户的列表,其中包含来自 firebase 的详细信息(不包括当前登录的用户)?

angular - 字符串中的 <a(点击)>

typescript - 为什么在使用隐式 Any 时 Typescript 不显示错误?