Angular中如何查询Cloud Firestore数组内的用户ID以获取所属聊天
当然可行!用Firestore的
array-contains就能实现你的需求 你要找的功能完全可以通过Firebase Firestore的数组包含查询来实现,刚好匹配你需要查找mensajes集合中conversadores数组包含指定用户ID的场景。
具体实现代码(结合AngularFire)
在你的ChatProvider里添加一个专门的查询方法就行,直接用Firestore的array-contains操作符:
@Injectable() export class ChatProvider { private itemDoc: AngularFirestoreCollection<Mensajes>; items: Observable<Mensajes[]>; constructor(private afs: AngularFirestore) {} // 获取指定用户所属的所有聊天会话 getUserConversations(userId: string): Observable<Mensajes[]> { // 构建查询:匹配conversadores数组包含目标userId的文档 this.itemDoc = this.afs.collection<Mensajes>('mensajes', ref => ref.where('conversadores', 'array-contains', userId) ); // 返回实时更新的会话列表(如果不需要实时,可改用get()) return this.itemDoc.valueChanges(); } }
额外说明
- 确保你的
conversadores字段是字符串数组类型,如果是其他类型(比如对象数组),array-contains需要完全匹配整个对象,这点要注意。 - 如果只需要一次性获取数据(不需要实时监听变化),可以改成异步方法:
async getUserConversationsOnce(userId: string): Promise<Mensajes[]> { const querySnapshot = await this.afs.collection<Mensajes>('mensajes', ref => ref.where('conversadores', 'array-contains', userId) ).get().toPromise(); return querySnapshot.docs.map(doc => doc.data() as Mensajes); }
内容的提问来源于stack exchange,提问作者dario rodriguez
相关产品推荐
相关产品推荐

