Google cloud firestore 多个查询的Firestore分页

Google cloud firestore 多个查询的Firestore分页,google-cloud-firestore,Google Cloud Firestore,在我的例子中,有10个字段,所有字段都需要通过或“进行搜索,这就是为什么我使用多个查询,并使用Promise.all()在客户端过滤常见项的原因 问题是我想实现分页。我不想得到每个查询的所有结果,因为这需要太多的“读取”成本。但是我不能对每个查询使用.limit(),因为我想要的是限制“最终结果” 例如,我希望得到10个查询结果中的前50个常见结果,如果我对每个查询limit(50),最终结果可能小于50 有人对多个查询的分页有什么想法吗?我认为实现这一点的最佳方法是使用查询游标,以便更好地管理

在我的例子中,有10个字段,所有字段都需要通过
或“
进行搜索,这就是为什么我使用多个查询,并使用
Promise.all()
在客户端过滤常见项的原因

问题是我想实现分页。我不想得到每个查询的所有结果,因为这需要太多的“读取”成本。但是我不能对每个查询使用
.limit()
,因为我想要的是限制“最终结果”

例如,我希望得到10个查询结果中的前50个常见结果,如果我对每个查询
limit(50)
,最终结果可能小于50


有人对多个查询的分页有什么想法吗?

我认为实现这一点的最佳方法是使用查询游标,以便更好地管理从搜索中检索的数据

我建议您查看以下链接,以了解更多信息,包括社区回答的问题,这似乎与您的案例类似


如果这些信息对你有帮助,请告诉我

不确定这是否相关,但我认为我也遇到了类似的问题,并提出了4种解决方法

  • 不要进行10次查询,而是获取与单个选择过滤器(例如类别)匹配的所有产品(在我的情况下,客户只能设置单个类别字段)。并在客户端执行所有过滤。使用这种方法,应用程序仍然可以一次读取大量文档,但至少在会话期间重用这些文档,并且比firestore的严格规则更灵活地进行过滤

  • 在服务器环境中运行多个查询,例如使用Node.js的cloud store函数,只获取与所有过滤器匹配的前50个文档。使用这种方法,客户机只接收需要的数据,而不是更多的数据,但服务器仍然读取大量数据

  • 这实际上是您的方法与公认答案的结合

  • 借助云函数在firebase中创建自动化文档,例如颜色:{red:[product1ID,product2ID…],…}仅存储文档ID并根据过滤器在服务器端使用云函数获取相应文档,创建匹配数组(和逻辑)的叉积并将其前50个元素推送到客户端。知道要在客户端显示哪些产品,然后处理获取客户端库


  • 希望这些能有所帮助。这是我的原始帖子

    您可以按顺序加载子集,直到获得正确数量的结果。@FrankvanPuffelen是的,我现在所做的与您提到的一样。但缺点是,例如,我想得到50个结果,每次查询200条记录,直到得到50条。如果幸运的话,我将通过几次顺序查询得到结果,但有时需要10次以上,因为数据的分布是随机的。不管怎么说,这并不漂亮,但现在是可行的。谢谢你的回答。光标可以提供帮助。但是你提供的链接与我的情况不太匹配。在我的例子中,有10个独立的查询。在他们返回结果之后,我会做一个局部筛选来获得他们之间的共同结果,如果共同结果没有达到我需要的数量,我会继续转到下一个子集,直到我得到正确数量的结果。但由于数据的分布,“时间”和“读取”成本无法控制。嗨@yuehengshi当然,我理解。我发现一些额外的链接可能会对你有所帮助,否则,继续使用子集可能是你最好的选择。链接如下:@gso_加布里埃尔感谢这些链接。我想我还需要继续使用子集。谢谢你的回答!我认为最后一个对我来说是一个很好的尝试,创建一些索引在查询时会很有帮助。