Flutter使用arrayContains查询Firestore无返回但文档存在问题
问题原因&解决方案
查询条件类型误用
arrayContains是Firestore专门用于数组类型字段的查询条件,作用是判断数组内是否包含指定元素。你的status字段为单值字符串类型,直接使用isEqualTo条件即可完成匹配。查询值不匹配
你代码中查询的目标值为'GameStatus.uninitialized',但存入Firestore的status字段实际值仅为uninitialized(Dart枚举默认toString()会携带类名前缀,如果你序列化时使用的是枚举的name属性存储,入库值就不会带类名前缀),二者不匹配自然无法查询到结果。修正后的代码如下:
await FirebaseFirestore.instance .collection('games') .where('status', isEqualTo: 'uninitialized') .get() .then((value) => { if (value.docs.isNotEmpty) { print(value.docs[0].reference.id), } else { print('nada'), } });
如果确认status字段实际是数组类型,可按如下排查:
- 检查数组内元素与查询值是否完全匹配(大小写、前后空格、字符完全一致,Firestore查询为严格匹配
- 确认集合查询权限没有限制对应条件查询
- 检查是否需要为该查询创建对应的复合索引(单字段查询不需要额外创建)
内容的提问来源于stack exchange,提问作者Gene
相关产品推荐
相关产品推荐

