如何过滤Cloud Firestore中含指定邮箱的chats集合流?
解决方案
问题原因
你当前的查询是将整个users Map与{usuario!.email: null}做字典序整体比较,Firestore会按Map的键顺序逐一比对,只有当目标文档的users Map在字典序上大于等于这个传入的Map时才会返回,这就是为什么只有第一个位置匹配的文档被筛选出来。
正确实现方式
要匹配users Map中包含指定邮箱键(无论位置)的文档,应该直接针对Map内的特定键进行查询:
方式1:检查指定邮箱键存在且值为null
FirebaseFirestore.instance .collection("chats") .where('users.${usuario!.email}', isNull: true) .snapshots()
方式2:仅检查指定邮箱键存在(兼容值非null场景)
如果后续该键对应的值可能不为null,也可以直接检查键是否存在:
FirebaseFirestore.instance .collection("chats") .where('users.${usuario!.email}', exists: true) .snapshots()
原理说明
Firestore支持通过点符号访问Map类型字段的子键,这种查询会遍历集合中所有文档,检查users Map是否包含指定的邮箱键,完全不受键在Map中的位置影响,能准确返回所有符合条件的文档。
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

