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

Firestore筛选异常:无法查询sellerDetails.selectedHoursByDay子值

问题原因

你当前代码里用arrayContainsAny筛选sellerDetails.selectedHoursByDay是错误的——从数据库结构来看,这个字段是Map类型(键值对),而arrayContainsAny只适用于数组类型的字段,所以无法匹配到预期结果。

解决方案

根据你的需求(匹配daysFilter中任意一个日期作为键的文档),可以通过以下两种方式处理:

方式1:直接适配现有数据库结构

利用Firestore的Filter.or组合多个字段存在性检查,判断selectedHoursByDay中是否包含daysFilter里的日期键:

void applyFilter() async{
    Query<Map<String, dynamic>> filterquery = _firestore.collection('Users');

    if (nameFilter != null && nameFilter!.isNotEmpty) {
      filterquery = filterquery.where('sellerDetails.sellerName', isEqualTo: nameFilter);
    }
    if (cityFilter != null && cityFilter!.isNotEmpty) {
      filterquery = filterquery.where('sellerDetails.city', isEqualTo: cityFilter);
    }
    if (districtFilter != null && districtFilter!.isNotEmpty) {
      filterquery = filterquery.where('sellerDetails.district', isEqualTo: districtFilter);
    }
    if (daysFilter != null && daysFilter!.isNotEmpty) {
      // 生成每个日期的存在性检查条件
      final List<Filter> dayFilters = daysFilter!.map((day) {
        return Filter.exists('sellerDetails.selectedHoursByDay.$day');
      }).toList();
      // 用OR组合所有条件
      filterquery = filterquery.where(Filter.or(...dayFilters));
    }

    setState(() {
      _userStream = filterquery.snapshots();
    });
  }

方式2:优化数据库结构(推荐)

如果项目还处于开发初期,建议把sellerDetails.selectedHoursByDay改成数组类型,结构示例:

selectedHoursByDay: [
  {"day": "Monday", "hours": ["09:00-12:00", "14:00-18:00"]},
  {"day": "Tuesday", "hours": ["09:00-12:00"]}
]

之后就可以用arrayContainsAny直接筛选:

if (daysFilter != null && daysFilter!.isNotEmpty) {
  final List<Map<String, dynamic>> dayObjects = daysFilter!.map((day) {
    return {"day": day};
  }).toList();
  filterquery = filterquery.where('sellerDetails.selectedHoursByDay', arrayContainsAny: dayObjects);
}

这种结构更灵活,后续扩展筛选条件(比如同时匹配日期和时间段)也更方便。

内容的提问来源于stack exchange,提问作者Korhan_34

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:30:59