firebase - 带 orderBy 的 firestore 相等过滤器

标签 firebase google-cloud-firestore

我正在使用 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/

相关文章:

node.js - 如何从云功能移动 Firestore 文档?

swift - 在 firestore 上自动更新的计时器

firebase - 如何按类别显示产品 flutter Firestore

android - 更改 Firebase 项目中的所有者是否会更改其 google-service.json?

firebase - 错误: Could not load the default credentials (Firebase function to firestore)

firebase - 如何以管理员身份从命令行查询 firestore

firebase - 如何让 firestore 在写入时创建嵌套对象作为子集合?

firebase 实时数据库下载定价与 firestore 读取

javascript - 如何在 ES6 语法中导入 firebase-functions 和 firebase-admin 以便使用 Babel for Node 10 进行转译

javascript - 在 Firebase Cloud Functions 中使用 Google Vision API 时出现类型错误