Firestore复合查询异常:已建索引,控制台可用但应用报多字段不等式错误
我根据Firestore复合查询文档编写了如下查询代码:
query( collection(db, 'users', user.value.id, 'leaderboard'), and( where('series.seriesStartDate', '<=', new Date()), where('score', '>', 0), ), limit(5) )
我已创建对应的查询索引,且该查询在Firebase控制台测试可正常运行,但在应用中执行时却抛出错误:
FirebaseError: Invalid query. All where filters with an inequality (<, <=, !=, not-in, >, or >=) must be on the same field. But you have inequality filters on 'series.seriesStartDate' and 'score'
请问我哪里操作有误?
你的问题核心是代码写法或SDK版本不支持多字段范围查询,以下是具体排查和解决步骤:
检查Firebase SDK版本
多字段范围查询是Firestore较新的功能,需确保Web SDK版本不低于9.18.0。查看项目package.json中的firebase依赖版本,若版本过低,执行升级:npm install firebase@latest修正查询代码写法
Web v9模块化写法中,多个where条件无需用and()包裹,直接作为query参数传入即可(and()多用于嵌套复合场景)。修改后代码:query( collection(db, 'users', user.value.id, 'leaderboard'), where('series.seriesStartDate', '<=', new Date()), where('score', '>', 0), limit(5) )直接传递多个
where条件更简洁,且逻辑与效果和控制台一致。确认索引完全匹配
确保你创建的复合索引字段顺序、筛选条件与查询完全一致,且索引状态为已启用(无创建中状态)。
控制台能正常运行说明数据结构和索引是正确的,问题大概率出在代码写法或SDK版本上,按上述步骤排查即可解决。
内容的提问来源于stack exchange,提问作者Abdul Rafay Shaikh

