【发布时间】:2020-01-09 19:23:46
【问题描述】:
我正在使用 Firestore,我有非常简单的查询,其中包含相等过滤器,我需要执行 orderBy(因为我必须限制结果)。我不能在 orderBy 中使用 startAfter,因为在这种情况下 Firebase 会引发错误。
FirebaseError:提供给 Query.startAfter() 的参数过多。参数的数量必须小于或等于 Query.orderBy() 子句的数量
但是,我不能将 orderBy 与相等过滤器一起使用。示例:
query.where('tags.supporter', '==', true).orderBy('tags.supporter');
这会引发 Firebase 错误:
FirebaseError:Order by 子句不能包含相等的字段 过滤标签。支持者
很有趣,这很好用:-
query.where('tags.supporter', '<=', true).where('tags.supporter', '>=', true)
^ 这有效并给了我 tags.supporter == true,但我不能将它与多个过滤器一起使用。
例子:
query.where('tags.supporter', '==', true).where('tags.volunteer', '==', true)
^ 有效,但我不能在没有 orderBy 的情况下使用 startAfter。但是如果我尝试使用 orderBy,我会收到错误消息:-
query.where('tags.supporter', '==', true).where('tags.volunteer', '==', true).orderBy(...)
^ 不起作用!
我无法进行 = hack,因为它需要复合索引,但我无法设置它,因为这些是用户添加的标签。
有什么想法吗?
如果这确实是一个限制,那么应该在文档中明确提及它,因为它会影响我的决定。现在,如果这确实是一个限制,我将不得不在我自己的应用程序中构建大量逻辑来过滤结果。
【问题讨论】:
-
您希望第一个查询做什么?在这种情况下,Orderby 是不必要的,因为它已经按您请求的单个年龄值排序。如果你想限制结果的数量,你应该可以在没有 orderBy() 的情况下使用 limit()。
-
它不起作用,因为当我稍后使用 startAfter 时,我收到此错误:- FirebaseError:提供给 Query.startAfter() 的参数太多。参数的数量必须小于或等于 Query.orderBy() 子句的数量
-
这听起来与您一开始的问题不同。我建议发布一个新问题来描述新问题。
-
我想我不明白为什么需要订购已经订购的结果。
-
这也是我的问题的一部分。除非我明确调用“orderBy”,否则 Firestore 将不允许我使用 startAfter。它不会让我为相等过滤器做“orderBy”(因为就像你说的,它已经被订购了)。由于文档没有提到任何内容,我认为这可能是一个错误。
标签: firebase google-cloud-firestore