Firestore多值索引疑问:能否用categories.*通配符创建索引?
Firestore 索引问题解答
很遗憾,你没法直接创建categories.* descending: true这种通配符形式的Firestore索引,Firestore目前不支持这种通配符匹配所有子字段的索引语法。
具体来说,Firestore的索引是严格绑定到具体字段路径的,categories.*这种写法不会被识别为匹配categories.gaming、categories.history这类子字段的通用规则。
针对你的场景,有两种处理方式:
- 如果你的查询是针对
categories下某个特定子字段(比如只需要按categories.gaming降序+postedAt排序),那必须为每个需要用到的子字段单独创建复合索引。比如要实现orderBy("postedAt").orderBy("categories.gaming", "desc")的查询,就得专门为postedAt和categories.gaming创建对应的复合索引。 - 如果你的需求是筛选出
categories下任意一个字段为true的文档,同时按postedAt排序,更推荐你重构数据结构——把categories改成数组形式,比如categories: ["gaming", "history", "sports"]。这样你可以用array-contains-any来匹配分类,再结合orderBy("postedAt"),只需要创建一个categories和postedAt的复合索引就够了,比为每个分类单独建索引高效得多。
如果一定要保留当前的键值对结构,那确实得为categories下每个可能的子字段单独创建索引,没有捷径可走。
内容的提问来源于stack exchange,提问作者MrShoot
相关产品推荐
相关产品推荐

