Firestore阵列包含任何内容,均无法正常运行

时间:2019-11-26 13:44:53

标签: javascript google-cloud-firestore angularfire

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

注意: membersarray,而0,1,2是map数据结构。

enter image description here

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

  }

没有错误。但是它不返回任何值。但是它具有价值。我希望查询有问题。这里有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

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])