如何使用List<String>在Firestore中查询匹配ID或指定字段的文档
问题诊断
你当前的写法存在错误:isEqualTo是单值匹配运算符,传入字符串列表后,只会匹配BusstopName字段值与整个列表完全相等的文档,无法实现「查询字段值在列表范围内的文档」的需求。
解决方案
Firestore 原生提供whereIn运算符用于该场景,直接替换isEqualTo即可,修改后的代码如下:
Future <void> saveRoute(List<String> _selectedBusStop) async{ Firestore.instance.collection('markers').where('BusstopName', whereIn: _selectedBusStop) .snapshots().listen((location) { if(location.documents.isNotEmpty){ for (int i = 0; i < location.documents.length; i++){ initRoute(location.documents[i].data, location.documents[i]); } } }); setState(() { }); }
注意事项
whereIn单次查询最多支持传入10个匹配值,如果你的_selectedBusStop列表长度超过10,需要拆分成多个批次查询后再合并结果。- 请确保
BusstopName字段存储类型为字符串,与列表内元素类型一致,否则会出现匹配失败的问题。 - 如果后续有「查询字段值不在指定列表内」的需求,可以使用
whereNotIn运算符,同样遵循单次最多10个值的限制。
内容的提问来源于stack exchange,提问作者randomstudent
相关产品推荐
相关产品推荐

