"@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')
);
}
没有错误。但是它不返回任何值。但是它具有价值。我希望查询有问题。这里有什么帮助吗?
答案 0 :(得分:1)
array-contains-any
(以及array-contains
)运算符检查数组是否包含元素,该元素示例与传递给调用的信息相匹配。因此,在您的情况下,您需要同时传递id
和joinDateTime
才能匹配。
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])