Firestore array-contains-any 无法正常工作

Firestore array-contains-any is not working properly

"@angular/fire": "5.2.3", 
"firebase": "7.4.0",

注:members是一个array,0,1,2是map数据结构。

service.ts

 getUserChatGroups(uid: string): Observable<DocumentChangeAction<MessageGroupMemberModel>[]> {
    return this.afs.collection<MessageGroupMemberModel>(`messageGroups`, ref => ref.where('members', 'array-contains-any', [uid])).snapshotChanges();
  }

page.ts

 init(): void {
    const uid: string = this.authService.getUserUid();
    this.chatService.getUserChatGroups(uid).subscribe(res => {
      console.log(res);
    },
      err => console.log(err),
      () => console.log('request completed')
    );

  }

没有错误。但它 return 没有任何价值。但它具有价值。我的查询有问题吗?

array-contains-any(以及 array-contains)运算符检查数组是否包含与您传递给调用的信息匹配的元素。因此,在您的情况下,您需要同时传递 idjoinDateTime 才能匹配。

ref.where('members', 'array-contains-any', [{ id: uid, joinedDateTime: ... }])

如果您不知道用户的 joinedDateTime,则无法查询当前数据结构中的数组。正常的解决方案是在文档中也存储一个单独的数组字段 memberIds,它只包含成员的 UID。然后你可以通过查询 that 字段来找到成员:

ref.where('members', 'array-contains', [uid])

ref.where('members', 'array-contains-any', [uid, uid2, uid3])