Firestore中使用两次orderBy是否需创建索引以加速查询?
Firestore多字段orderBy查询是否需要创建索引?
没错,你必须为这个包含两次orderBy的查询手动创建复合索引——Firestore只会自动生成单字段的排序索引,多字段组合排序的场景需要我们自己配置索引支持。
为什么会这样?
你写代码的时候没收到即时错误提示很正常,Firestore的这类索引错误是在查询实际执行的时候才会抛出的,到时候你会在日志里看到一个异常,里面还会附带一个直接跳转到Firebase控制台创建对应索引的快捷链接(当然你也可以手动去建)。
具体怎么创建这个索引?
- 打开Firebase控制台,找到你的项目的Firestore数据库模块
- 切换到「索引」标签页,点击「添加索引」按钮
- 按照下面的信息填写:
- 集合路径:
users/{currentUID}/received_messages(这里的{currentUID}是通配符,能覆盖所有用户的received_messages子集合) - 排序字段:先添加
messageSeen,选择你需要的排序方向(比如升序);再添加date,设置对应的排序方向 - 索引类型选「集合」索引就好
- 集合路径:
- 保存后等个几分钟,Firebase会完成索引的构建,之后你的查询就能正常运行了
额外提个小建议
注意到你的date字段是01/02/99这种字符串格式,用字符串排序的话会按字典序来,比如10/01/23会排在09/30/23前面,这显然不符合实际的日期顺序。建议把date改成Firestore的Timestamp类型或者时间戳数字,这样排序才会准确。
内容的提问来源于stack exchange,提问作者Jeff Padgett
相关产品推荐
相关产品推荐

