Flutter中Cloud Firestore的orderBy失效问题(附错误日志)
Firestore查询加orderBy就报错?看这解决办法
我的代码
late final Stream<QuerySnapshot> products = productsRef .where('submitters', arrayContains: uid) .where('postState', isNotEqualTo: 'completed') .orderBy('createdAt', descending: true) .snapshots();
问题现象
只要加上orderBy('createdAt', descending: true)这句,查询就报错;删掉这句,查询就能正常执行。错误核心是Firestore提示需要创建复合索引。
解决步骤
这是Firestore的常规要求:同时使用多个where条件和orderBy时,必须手动创建复合索引,操作步骤如下:
- 打开Firebase控制台,找到对应项目并进入Firestore数据库页面
- 点击顶部「索引」标签,再点击「添加索引」
- 按以下配置填写:
- 集合:选择代码中
productsRef对应的集合名称 - 字段:依次添加三个字段:
submitters,类型选择「数组」postState,类型选择「字符串」createdAt,类型选择「时间戳」,排序方式选「降序」
- 勾选「启用集合范围查询」
- 集合:选择代码中
- 保存后等待几分钟,索引创建完成后查询即可正常运行
内容的提问来源于stack exchange,提问作者SILENMUS
相关产品推荐
相关产品推荐

