我正在使用 Firestore,并且我有非常简单的带有相等过滤器的查询,其中我需要执行 orderBy (因为我必须限制结果)。我无法将 startAfter 与 orderBy 一起使用,因为 Firebase 在这种情况下会引发错误。
FirebaseError: Too many arguments provided to Query.startAfter(). The number of arguments must be less than or equal to the number of Query.orderBy() clauses
但是,我无法将 orderBy 与相等过滤器一起使用。示例:
query.where('tags.supporter', '==', true).orderBy('tags.supporter');
这会引发 Firebase 错误:
FirebaseError: Order by clause cannot contain a field with an equality filter tags.supporter
有趣的是,这很好用:-
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(firebase.firestore.FieldPath.documentId())
。这允许您使用多个相等过滤器,并且仍然执行 limit 和 startAfter。
关于firebase - 带 orderBy 的 firestore 相等过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830082/