You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:20:25